海量数据存储、处理、操作。
海量:无法短时间迅速解决,无法一次性装入内存。
那解决办法呢?
(1)时间:巧妙算法+合适数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树
(2)空间:大而化小,分而治之(hash映射)
(3)单机:只考虑CPU,内存,硬盘的数据交互
集群:适合分布式处理,并行计算(更多考虑节点和节点间的数据交互)。
处理海量数据,不外乎:
1.分而治之/hash映射 + hash统计 + 堆/快速/归并排序
2.双层桶划分
3.Bloom filter/Bitmap;
4.Trie树/数据库/倒排索引;
5.外排序;
6.分布式处理之Hadoop/Mapreduce。
从set/map到hashtable/hashmap/hashset
序列式容器:vector/list/deque/stack/queue/heap
关联式容器:set(集合)和map(映射表),还有hashtable(散列表)
类似关联式数据库,Key-Value
set/map
根据元素的键值自动被排序,不允许相同的键值。
set:键值就是实值,实值就是键值,map:实值(value)和键值(key)
hash_set/hash_map
hash_set同set一样,实质就是键值,键值就是实值,hash_map同map一样
什么样的结构决定其什么样的性质,set/map基于RB-tree之上,有自动排序功能,而hash_set/hash_map都是基于hashtable之上,所以不含有自动排序功能,加个前缀multi_无非就是允许键值重复而已?
网友评论