前提:数据库采用的是postgresql,当前解决方案是直接修改数据库相关数据,现在想通过内存数据库来修改数据库相关数据以提高io速度。
当前流程图大概如下:
第一步:首先将数据库中的数据写入内存,
第二步:c端需要查询的时候,如果有数据则直接从内存中查询,如果没有数据则直接从数据库中查,顺便把查到的数据再次写入缓存,
第三步:c端需要增删改的时候直接对数据库进行操作,同时删除相关缓存数据。
-------------------------------------------------
改进后的流程图大概如下,就是跟数据库的的交互变掉了,其他流程不变
即在启动服务器的时候先将数据库中的数据写入到内存中,以后的数据操作相关在这边进行操作,然后在任何时候(一般都指服务器承载不大的时候)可以new一个进程把内存中的数据写入数据库。
----------------------------------------
以下为一些测试相关数据结论:(数据单位为os.now(0))
第一次测试:数量级为180w,内存中采用k-v存储结构,采用在180w数据集重好随机取20条数据来确保查询结果的相对准确性
结论:在内存存储结构为k-v下,内存数据库的查询速度很棒
第二次测试:测试各个量级的数据占内存多少,来确定内存数据库是否可行(collectgarbage)
结论:100w量级的大约不到1G,前期的话还算靠谱
第三次测试:在1w数据量和10w数据量下分别采用三种查询方式看效率
结论:频繁查询可定要用主键索引。但是如果是低频次查询,我们也可以使用扫描查询的方式。前提是扫描查询在当前量级上必须是有效的。如果合服到了百万量级,我们可以关闭内存数据库,访问直接回到原生数据库即可(通过斜率比较得出)。