【问题标题】:SQL Table billions of entries - Looking for performance recommendations [closed]SQL 表数十亿个条目 - 寻找性能建议 [关闭]
【发布时间】:2020-04-18 08:18:35
【问题描述】:

我有一个庞大的数据库,我正在寻找合适的设置。目前我将我所有的条目都插入到 MongoDB 中,希望它比 MySQL 工作得更好(MySQL 不适用于如此巨大的数据库)。

我制作了一个小的 Python 脚本,它使用多处理搜索我的所有文本文件。对于纯文本文件 (150gb),一次查询大约需要 1-2 小时。

也许这些信息会有所帮助: 数据是一个字典(键,值,但是有一些具有不同值的重复键。

我可以如何设置以及使用哪个 SQL 系统来处理如此大量的条目,并且查询甚至会比文本文件搜索更快吗? 你会推荐我什么?

【问题讨论】:

  • 150GB 是可控的。您是否检查过您的索引,它们是否针对您的数据集进行了优化。您应该研究大型表和全文搜索的分区方案。这个问题可能会被关闭,因为这类问题的答案往往是基于意见的。
  • 即使它的意见基于我会感谢每一个意见,因为我不会称自己为 sql 专家。

标签: sql database performance


【解决方案1】:

解决方案可以使用像 MySql、Spark on parquet 文件甚至 MongoDB 这样的 RDBMS。我对 Mongo 没有太多经验,所以我会权衡第 2 种选择。

关系数据库管理系统 - 1. 对表进行分片和分区。这将使您的搜索具有可扩展性。

  1. 根据搜索键(不必是唯一的)为表编制索引 - 这将加快查找速度。

  2. 压缩数据

如果您希望搜索和处理所有记录,那么 Shard 和 Partition 会有所帮助。如果要处理的记录很少,那么索引会有所帮助。

如果更改了大量数据,那么大数据系统(使用 Spark)和数据湖(使用 Parquet)将有所帮助。 Spark 可以以比您正在使用的 python 脚本更好的方式并行处理。 Parquet 将帮助压缩和拆分数据以进行并行处理。它是列式的,因此可以在几列上进行查询,而无需读取整行数据。如果要更改少量数据,则此选项不好。我的系统使用具有 20 个 CPU 和 100GB 内存的 Spark 集群在 20 分钟内处理了大约 200GB 的数据(每条记录都被处理)。

适当的数据模型对性能和可扩展性有很大帮助,因此这也需要适当。

【讨论】:

  • 谢谢你的建议,我会试试这个。
  • 你说你有文档和键值对。告诉我更多关于结构的信息。数据模型对性能和可扩展性有很大帮助。
  • 这就是一切。我所有的数据都按键和值排序,但一个键可能会以不同的值出现多次。
  • 什么作为值存储?一份文件?
  • 不只是另外 5 个字段,每个字段大约 10 个字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2017-01-22
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
相关资源
最近更新 更多