bloom-filter 算法redis
场景:我说的大数据量处理是指同时须要对数据进行检索查询,同时有高并发的增删改操做;
记得之前在XX作电力时,几百万条数据,那时一个检索查询可让你等你分钟;算法
如今我是想探讨下对大数据量的处理,那时我就在想例如腾讯,盛大,动辄数以亿计的账号,怎么能这么快呢, 因而找到了互联网如今对数据处理的发展:
对于大数据量处理,若是是互联网处理的话,通常分为下面阶段:
第一阶段,全部数据都装入一个数据库,当数据量大了确定就会出现问题,就像刚刚说的查询,因而想办法
第二阶段,那时确定想作缓存机制,确实能够如加上缓存Memcached,但缓存也是治标不治本,数据量太大了也是不行因而
第三阶段,master-slave模式,进行主从数据库,master提供写,slave进行读,这个适合于有写形成数据库卡的方法,XX那个仍是不行,因而
第四阶段,垂直分库,这个意义仍是不大,对于这种采集数据的,因而
第五阶段,进行水平分库,这个不错,记得之前从兴也是按这个分时间水平分库,其实能够分的更细点估计效果更好sql
补充一个阶段,应该还有一个阶段是内存数据库的阶段,内存数据库只是复杂的关系处理和事务等,电信计费等不少都用这个数据库
第六阶段,用nosql作了,关于nosql怎么作能够参考google的bigtable
其实本文主要目的也是想探讨nosql对大数据量的处理:
NOSQL就是将写操做在内存中进行,定时或按某一条件将内存中的数据直接写到磁盘上,必定基础上是解决了
nosql 主要解决了:
1,高并发读写的需求
2,海量数据访问的需求
3,数据库横向扩展性的需求
CAP理论来讲,nosql是牺牲了一致性,作到了AP,一致性只是保证了最终一致性
缺点也很明显:
1,当机器挂了数据将会丢失
解决:能够考虑共享内存缓存
补充1:其实这里能够展开了讲,一种是经过共享内存来实现网络
集群内存:根据的是Quorum NRW理论,好比你有N台机子用来集群,每次你进行读写数据时能够至少要同步到X个节点才算成功,因此你每次读数据时只须要读大于N-X个节点就能保持你的正确率,其实就是对数据进行的冗余备份,不过咱们存的是内存,相对于直接的磁盘操做,跨网络进行内存操做能够更快;并发
其实还一种保证数据一致性,就是记录日志,当数据每次写操做内存时都进行日志记录,而后再在内存中进行写操做,至少不少数据库就是这样作的,如redisnosql
2,内存的限制,内存有限当写数据操做太大的时候内存也会爆
解决:Bigtable的作法是经过bloom-filter算法合并掉相同的操做,好比UPDATE A='A' ,update A='B'时能够直接合并了
---------------------------------
基本理论基础
nosql理论基础:内存是新的硬盘,硬盘是新的磁盘
NOSQL探讨
关系型数据库都要实现事务ACID特效即:原子性(Atomicity), 一致性(Consistency), 隔离性(Isolation), 持久性(Durability)
CAP理论
Consistency 一致性
Availability -可用性
Partition -容错性
-------------------------------
抛砖引玉而已,若是有什么经验欢迎分享,我将持续关注大数据量处理
高并发
大多数NoSQL数据库都不支持事务,不支持SQL等,因此仍是得保留关系型数据库大数据
如今有人提到用内存数据库, 整体若是是简单业务来讲,NOSQL的速度比内存数据库更快,但NOSQL最大缺点,不支持事务,不支持SQL查询等