【问题标题】:Database storage with fast elementary queries and counts for 500M items具有快速基本查询和 5 亿项计数的数据库存储
【发布时间】:2013-10-18 05:09:27
【问题描述】:

我正在寻找一种存储解决方案,该解决方案(仅)对基本查询快速且依赖于大型但简单的数据集;没有其他限制。

数据由 5 亿项组成,形状如下:

{
    a: VARCHAR(100)
    b: VARCHAR(100)
    c: VARCHAR(100)
}

我想快速解决以下基本查询:
“给我第 X 页的项目 a = X AND b = Y AND and C = Z”
这三个约束中的任何一个都是可选的,例如,a = X 也是一个有效的查询。
所以我只想查询单行内的字段相等性。
(其他查询并不重要。永远不需要连接。)

此外,我希望对每个查询进行快速计数估算。
例如,我想知道a = X 大约有 200 万个项目。

哪些存储解决方案/配置最适合,为什么?

更新:知道基础数据很少更改也可能很好 并且一次全部添加到 ± 2000 万个项目的批次中。



我目前尝试将数据摄取到 MySQL 数据库中,每列都有索引。我得到了多达1亿个项目,查询性能非常好。但是,服务器变得非常不稳定,导入过程随机停止。我正在使用LOAD DATA。

【问题讨论】:

  • 这是 RDBMS 的基础,我喜欢 postrgres,但每个人都有自己的。
  • @ilanberci 看起来确实很基础,但我在使用 MySQL 处理这样的数量时遇到了巨大的困难。这让我觉得它可能不像看起来那么基础……PostgreSQL 会处理得更好吗?
  • 请尝试 postgres(我不隶属于他们),它可以轻松处理这种类型的负载。请确保您的每一列都按照您之前提到的那样单独编入索引。另外,如果你在做相等比较,使用哈希索引而不是 btree
  • 您是在寻找完全匹配,还是同时搜索?
  • @Bertvan 仅完全匹配。

标签: database performance storage bigdata


【解决方案1】:

您的术语的频率如何,例如所有 a、b 和 c 条目是否不同?如果没有,将它们映射到整数可能是一个更快获得查询的好主意。

无论如何,我建议您尝试免费的开源数据库 MonetDB (http://www.monetdb.org/)(披露:我为构建它的研究小组工作),列式方法在这里可能工作得很好。我最近将它用于一个包含超过 1000 亿行的类似用例,效果很好。

【讨论】:

  • 谢谢汉内斯!有些条目会重复很多次,有些只会出现一两次。首先查找整数的开销是否值得?
  • 整数比较比字符串快很多。如果您还按最常查询的列对数据进行排序,则会得到二分搜索。但如果字符串不多,MonetDB 的内部字符串表示(类似于哈希映射)也可以很好地工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多