-
实例数据 五列联合主键
k1 = "24332"k2 = "p1"k3 = "2014"k4 = "12"k5 = "03"# 收入值amt_value = 234.3 -
存储方式一:单维度存储数据
dict_datas = {}union_key = (k1,k2,k3,k4,k5)dict_datas[union_key] = amt_value
查询方法 rs_amt_value = dict_datas.get(union_key, 0.0)
- 存储方式二:每个主键一个维度,多维度存储
dict_datas = {}dict_datas[k1][k2][k3][k4][k5] = amt_value
try: rs_amt_value = dict_datas.get(k1).get(k2).get(k3).get(k4).get(k5)except: rs_amt_value = 0.0
-
内存占用:tuple占用大量内存,是nestedkey 64倍,数据量放大到300M 扩大到比例为127倍
内存占用对比
- 10w条数据查询效率:tuple查询速率基本为0,nested10w次均匀分布在0.001这个级别,也基本为0
datas_tuple_key.get((tuple))
datas_nested_key[key0][key1][key2][key3][key4]

- 测试总结:
测试结果 | 说明 | |
---|---|---|
代码编写复杂度 | tuplekey 优 | tuplekey编写简洁 |
构建内存的时间 | tuplekey 优 | nestedkey 进行了更多的监测,tuplekey只hash一次 |
构建后内存占用率 | tuplekey 弱 | nestedkey 是维度加法,tuplekey是维度乘法 |
查询效率 | tuplekey稍快 | 差别不大 数据量大会放大,内存也会放大 |
网友评论