如何存储和查询数十亿的键值对

Posted

技术标签:

【中文标题】如何存储和查询数十亿的键值对【英文标题】:how to store and query billions of key-value pairs 【发布时间】:2014-01-23 19:57:00 【问题描述】:

我正在生成这样的键值对:

KEY                       VALUE
----                      ------
user.varname.2014-01-01   10
user.varname.2014-01-02   10
user.varname.2014-01-03   10  

我需要手术:

按用户名查询 按变量名查询 按日期查询

目前我正在使用 mysql,并且可以很好地拆分字符串以进行查询。

    查询性能如何?这是存储和查询数十亿行的好方法吗? 也许我应该使用 nosql 或其他数据库?

【问题讨论】:

【参考方案1】:

一个(非常)部分答案:

像 redis 这样的纯键值存储对于按日期搜索等操作的性能非常差,因为在这个特定字段上没有索引(当然它不是您指定的字段,但您希望到)。

所以 redis 必须读取所有键来搜索特定日期,这显然效率不高。

根据您的 3 个搜索操作规范,如果您要搜索数十亿条记录,我看不出您如何避免拆分为 3 个字段并对其进行索引。

【讨论】:

这是真的。阅读和拆分所有项目以进行搜索是一个糟糕的主意。谢谢 你真正在寻找什么你在 sql 中没有的?速度 ?可扩展性?至于速度,可以考虑***.com/questions/10692398/…。如果要扩展到更大的数据集,请查看 hbase 等大数据数据库

以上是关于如何存储和查询数十亿的键值对的主要内容,如果未能解决你的问题,请参考以下文章

java问题,我想在java中存储键值对,以便使用,但是键值对的键和值都有重复元素,使用hashmap会产生覆盖。

在Neo4j中,我们如何使用graphql将生成查询后获得的键值对存储到另一个现有节点?

如何动态添加solr中的键值对?

如何在python中打印字典的键值对

java 怎么样获取Map中第几个键值对

排序数组以及遍历普通对象的键值对以及如何遍历一个不同键值的对象数组