【问题标题】:Choosing the right database engine for relational data with billions of records为具有数十亿条记录的关系数据选择正确的数据库引擎
【发布时间】:2017-06-23 14:26:32
【问题描述】:

我的 Python 应用程序数据结构是纯关系型的。 我对最大表的估计是每年大约 100 亿行(所有其他表都非常小)。 每行大小约为20-30字节

什么是适合我的数据库引擎?

【问题讨论】:

标签: database database-design


【解决方案1】:

您可能会考虑我使用的以下内容,但这当然取决于您的数据是什么样的以及您的应用程序/用户需要如何与之交互。这不是一份详尽的清单,只是我用过的东西。

  1. Greenplum 数据库是一个开源分布式 Postgres 数据库。 http://greenplum.org/ 它可以很好地扩展并支持几乎所有 Postgres 的东西,除了我知道的全文索引

  2. Apache Phoenix:Hadoop/HBase 之上的开源 sql 层。它可以很好地扩展,但生态系统有点复杂(根据 Hadoop)。 Cloudera 的 Impala 与此类似。 https://phoenix.apache.org/

  3. Oracle 分区(最好在 RAC 上)。如果您负担得起许可证,Oracle 分区允许以各种方式对您的数据进行分片。如果你有它与 RAC,那也将提供并行查询执行

  4. 只需对数据进行分区(在任何 RDBMS 上)并将分区放在好的磁盘上

这些是我实际使用的 4 个想法,请记住,在良好的硬件上,有一些表分区,10B 行并不是真的那么多,所以你可能只需要一个更好的盒子 [s] 和钩子它通过 10G 网络或更好的网络连接到具有某种 SSD 的 SAN。还可以考虑将索引放在与 db 文件所在的单独磁盘上,如果负担得起,请始终使用 SSD。

不管怎样,HTH

MG

【讨论】:

    【解决方案2】:

    每行 30 字节小于 300GB,这是一个小型数据库,在 Oracle 或 SQL Server Enterprise 版本的功能范围内。您将不需要 Oracle RAC。

    您需要注意应用程序设计和索引/分区。查询和存储优化对性能的影响比选择 DBMS 更大。

    【讨论】:

    • 你觉得MySql会适合这个吗?
    • @uriz 我相信如果有好的磁盘 (SSD),你可能会很好地使用 MySQL IMO。
    猜你喜欢
    • 2015-12-04
    • 2016-08-21
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多