有上亿条订单数据需要做到快速查询,业务量不大,需不需要做磁盘阵列?用什么数据库和什么软件建立索引比较好?需要做到用户名、订单编号、手机号可以查询到订单信息,求助各位大佬!万分感谢!如果需要什么细节信息我在补充!
这个问题是我在网上看到的。其实可以看出提这个问题的人,并不了解查询的本质。
查询效率取决于遍历数据的规模,而不是总的数据规模
那么如何减小遍历规模呢?那就是索引。除了数据库自带的索引,还可以是外部索引。
对于本文开头的问题,采用索引和存储分离的架构即可,MySQL足以胜任存储需要。
订单直接按时间分表即可,ID必须可以直接定位到具体的数据库 - 表 - 行。
如果数据百亿千亿级别,可以考虑用hbase之类的。实际上数据存储用啥介质一点不重要。
索引采用成熟的搜索引擎,lucence,solr,elasticsearch,shpinx之类。
搜索的时候,先查出对应的ID,然后根据ID拉全部数据即可。为了防止数据修改导致数据不一致,在索引和数据库里都有一个版本标记,这个版本标记可以是上次修改时间,也可以是一个随机字符串,从索引查出的版本标记如果跟数据的版本标记不一致,说明索引不及时,舍弃这条数据。
当然,这不是实时的,实时性取决于索引的刷新时间,一般秒级没问题,订单这种场景基本也够了。
如果非要完全实时,增量加存量即可,先从数据库查最近1分钟内的订单,然后去索引查全部,两者合并。