SQL 表数十亿个条目 - 寻找性能建议

标签 sql database performance

<分区>

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

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

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

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

最佳答案

解决方案可以使用 RDBMS,如 MySql、Spark on parquet 文件甚至 MongoDB。我对 Mongo 没有太多经验,所以我会权衡第一个和第二个选项。

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

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

  2. 压缩数据

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

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

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

关于SQL 表数十亿个条目 - 寻找性能建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59516374/

相关文章:

database - unity 使用 SQLite 数据库构建 webGL

sql - SQL 数据库系统中临时表的用例是什么?

mysql - 如何将 MS-SQL Server SELECT 查询转换/迁移到 Oracle 和 MySQL?

c# - 生成的 LinqtoSql Sql 比完全相同的手写 sql 慢 5 倍

performance - 如何有效地为kafka消费者组实现不断更新的主题

java - 性能和可伸缩性的架构问题

performance - 有没有比 switch 语句更快的东西?

c# - 带偏移量和获取的 SQL 查询

java - @Put 图像映射

java - 如何更新存储在 Assets 文件夹Android中的数据库