快速查找100gb数据

orl*_*dpm 2 database-design

我在~10MB .csv文件中保存了大约100GB的数据.如何针对此数据优化数千个查询的查找速度?具体来说,我不知道要考虑哪些技术或如何估计相对性能.

每个文件对于日期都是唯一的,并包含多个人的数据,例如:

...
2005-07-03, "Daffy Duck", ...
2005-07-03, "Daffy Duck", ...
2005-07-03, "Mickey Mouse", ...
2005-07-03, "Mickey Mouse", ...
...
Run Code Online (Sandbox Code Playgroud)

我想拉出与给定日期/名称相对应的所有信息,数千个日期/名称对.等效的SQL查询将是SELECT * FROM myDB WHERE Date='2005-07-03' AND Name='Mickey Mouse'.

目前我还没有将数据加载到数据库中.要执行我的"查询",我找到相应的日期文件,并按我要查找的名称过滤行.我是否可以在关系数据库,noSQL数据库或其他任何方式中存储数据?如果是这样,为什么和多少?

小智 9

我是否可以在关系数据库,noSQL数据库或其他任何方式中存储数据?

是的(我推荐'正常'的RDBMS)

如果是这样的话......

这是索引的一部分

......多少钱?

地段

  • -1对不起,这个答案真的可以使用更多"为什么" (4认同)
  • @orlandpm - '为什么'的简短回答是因为基本上数据库和关系数据库是专门为这些事情而制作的.对于这些类型的事物*,数据被组织和索引*.在任何现代硬件/现代数据库中,使用具有简单两列相等性检查的正确索引表搜索100GB数据将是快速的. (4认同)
  • @orlandpm的表现是相对的,但肯定会比手动做更快的事情吗?内部"正常"索引是['b-tree'](http://en.wikipedia.org/wiki/B-tree),它像二叉树一样,但针对基于块的存储进行了优化. (2认同)

Cad*_*oux 5

我将在这里讨论一个魔鬼的倡导者,并说你可能无法通过关系数据库或任何其他数据库"系统"获得相对于将所有这些数据放入所需的工作的特定操作更好的性能一个数据库.

尽管我建议将数据加载到某种数据库(即完整的编码数据管理系统),但您的文件很小.从您的问题来看,听起来您可以在恒定时间内识别所需的文件,然后只需要读取和过滤(使用正则表达式?)最多10MB的数据,那么为什么需要关系数据库呢?

只需识别文件并通过grep管道就可以了,对吧?这非常有效.

具有适当索引(关于日期,名称)的关系数据库只会使第二步更有效,即使这样,数据集也相当小 - 每个10MB文件中有几千行?

我知道这听起来像是通过将所有内容保存在文本文件中来解决问题的一种非常粗略的方法,但要保持简单.您必须管理数据的解析,验证和加载到数据库中,然后以数据库形式管理数据的额外存储等.

您没有提供有关执行此搜索的频率,您对结果获得的数据或任何其他性能和操作要求的信息.

如果您需要每秒多次执行此特定操作,或者希望灵活地以更具创造性的方式处理数据,或者对当前位于单独文件或任何数量的事物中的数据执行任何类型的分析,则关系数据库立即将自身视为数据管理的最佳选择.

  • @orlandpm将其加载到数据库,日期索引,名称(或将名称规范化为单独的表,其名称为索引).在没有看到整个数据的情况下,再次,不容易推测数据的最佳模型或最佳索引策略. (2认同)