今天去面试一家企业,出了一道题,说他们的数据格式是以不同企业、产品类型、产品、批次、编码的形式需要存储,但是量级在10亿以上。问什么样的方式进行检索最快。希望提升性能。另外,支持多种角度,比如按企业、按产品类型、按具体的编码等角度查询。都希望尽快出结果。
对于这种结构明晰的数据,我觉得是有一定的规则可循的。比如按照以下格式:
企业(8位码)+产品类型(6位码)+产品编号(8位码)+批次(5位吗)+编码(15~35位码),这样可以对所以数据进行规范化。并对这些数据进行索引。
如果是按照企业查询,那么仅对前八位进行查询即可。当然对所有企业也会有单独的存储或者建立单独的索引。
如果是知道企业和产品,则可以定位前22位。当然对于产品类型与产品的关联也会进行单独的索引。
如果知道具体的编码,则更方便,直接查询23位以后的若干位。
然后将定义规则的统一码,放到Cassandra中,并以统一码为key值。那么定位起来是相当快的。Cassandra对于一次写入,多次读取的场景是很适合的。并且数量级在50亿以下。性能上没有问题,facebook做过测试。在此量级下,性能是很快速的。
在Cassandra的value中,可以存储一定的查询信息,也可以存储对应具体的存储位置。这样更利于具体数据的定位。
具体数据的存储,可以按照横纵向划分后的固定格式,存储到关系型数据库中。
当然,对于数字的某个区间,应该还有更快的查询方法,还有优化的潜质。欢迎大家拍砖。