处理大数据量时的几个方法
没有亲身实践过大数据量的处理,最近查了一些相关方面的资料,把自己的理解记录下来,希望有机会能得到大神的指点,为以后的开发打些基础。
查阅到的解决大数据量的方法有:
1.主从数据库(master-slaver),把数据库的读和写分离开,分别在不同的数据库进行,主库只进行写的操作(增删改),从库负责查询的操作,再将主库的数据同步到从库。写的库只有一个,读的库可以有多个。
由于对数据库的查的操作比较多,当多个用户同时进行读取的操作时,由于数据阻塞会影响用户写的操作,所以把读和写分布在不同数据库上,提高主库写的性能。而当主库宕机时,可以使用从库的数据做备份,避免数据丢失。但缺点是主库和从库同步会有一定的时间延迟。
2.使用内存数据库redis,对于redis还只是初步的了解,redis是以key-value的形式存储在内存中的(cpu先访问缓存,如果没有目标数据再访问内存,如果内存仍没有目标数据,内存就去访问磁盘,内存把访问到的数据暂时保存,交给cpu处理。这个还有待验证!),因为redis将数据存储在内存中,省掉了一步访问磁盘的过程,所以速度很快,redis存储数据的类型也比较多,分别有String、List、Set、Sort Set(有序集合)、Hash五中类型。redis实现数据持久化(将数据写入到磁盘上)有两种方式,一种是快照的形式,将redis中的数据每隔几秒做一次快照,写入.rdb文件中,但如果redis出现问题,在上一次快照之后到redis出现问题的这段时间里,数据就会丢失。另一种方式是aof方式,比快照更具有持久性,redis将每次写的操作都追加在.aof的文件中,实现数据持久化。
3. 分布式数据库,将数据通过一定的规则分布到多个服务器上面,或者把一个表拆分成几个表来存储数据(暂时了解这么多,具体的以后再补充)。