【问题标题】:Which DB should I use?我应该使用哪个数据库?
【发布时间】:2010-08-19 16:08:28
【问题描述】:

我现在正在构建一个应该存储和处理大量数据的应用程序。所以现在我正在努力解决这个问题——我应该使用哪个数据库。

我的要求是:

  • 每秒最多可处理约 100,000 个插入命令(有时来自不同线程的多个命令)。 100,000是峰值;大多数情况下,金额在数百到数千之间。
  • 存储数百万条记录。
  • 尽快查询数据。
  • 每个实体的部分数据属性都会发生变化,这比关系数据库更适合非关系数据库行为。但是,可能属性的总和并不大,因此可以在关系数据库中显示为列(如果这样更快的话)。
  • 更新命令很少出现。

你会推荐我使用哪个数据库?

谢谢!

更新:我使用的操作系统不是 Windows。我认为如果 SQL Server 是最推荐的数据库,那么我可能会切换,但从您的回复来看,情况并非如此。

关于预算 - 我将从最便宜的选择开始,我想一旦公司有更多的钱和更多的用户,这种情况就会改变。

没有人推荐过 no-sql 数据库。对于这种要求,他们真的那么糟糕吗?

【问题讨论】:

  • 您使用什么操作系统和开发工具?
  • 我无法告诉您应该使用哪个数据库,但我会建议您通过某种批量上传来提高性能。仅仅因为我们现在有更好的机器并不意味着你应该接受极端的压力:)
  • 我想查看一个关于数据库建议的问题,该问题阅读“以体面的方式查询数据 - 不快速,更曲折......”

标签: database


【解决方案1】:

答案取决于提出其他问题,例如您想花多少钱、您使用的操作系统以及您在内部拥有哪些专业知识。

据我所知,可以处理如此大规模的数据库包括: DB2、Oracle、Teradata 和 SQL Server。 MySQL 也可能是一种选择,但我不确定它的性能。

我敢肯定,还有其他一些设计用于处理您建议的大规模数据,您可能还需要研究这些数据。

因此,如果您的操作系统不是 Windows,则可以排除 SQL Server。

如果您想省钱,MySQL 可能是您的选择。

DB2 和 Oracle 都是成熟的数据库系统。如果您的系统是大型机 (IBM 370),我会推荐 DB2,但对于基于 Unix 的系统,两者都可以选择。

我对 Teradata 了解不多,但我知道它是专为海量数据设计的,因此可能更接近您的需求。

可以在此处找到更完整的选择列表:http://en.wikipedia.org/wiki/List_of_relational_database_management_systems

这里是一个不错的数据库比较:http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

每秒 100000+ 次插入是一个巨大的数字,无论您选择什么,您都在考虑在硬件上花费一大笔钱来处理这个问题。

【讨论】:

  • 在 DB2 和 Oracle 之外,您为什么建议将 DB2 用于 IBM 大型机?
【解决方案2】:

这不是关于选择什么数据库的问题,而是关于你的技能和经验的问题。

如果您认为只有一台物理机器就可以实现,那么您就错了。如果您知道应该使用几台机器 - 那么您为什么要询问 DB 呢? DB 不如您使用它的方式重要。

从一台服务器上的只写数据库开始,现在垂直扩展它。使用多个只读服务器并水平扩展它们(这里几乎总是可以安全地选择文档数据库)。 CQRS 概念会在您即将提出的问题上提出。

【讨论】:

    【解决方案3】:

    我要担心的第一件事是您的磁盘布局,您有混合工作负载(OLTP 和 OLAP),因此如果您的 IO 子系统,正确调整磁盘大小和放置以实现此吞吐量非常重要系统无法处理负载,那么您将使用什么数据库并不重要

    此外,也许每秒 100,000 次插入可以批量加载,顺便说一句,每秒 100,000 行在短短 12 小时内相当于 72,000,000 行,所以也许您想存储数十亿行?

    【讨论】:

    • 并没有真正解决这个问题。
    【解决方案4】:

    您可能无法每秒处理 100k 个单独的插入操作,您肯定需要将它们批量处理成更易于管理的数量。

    一个线程无论如何也无法执行那么多命令,所以我预计会有 100-1000 个线程执行这些插入操作。

    根据您的应用,您可能还需要某种高可用性。除非你在做类似科学应用的东西。

    我的建议是聘请能够为您提供可靠答案的人 - 最好是以前做过的人 - 如果您不知道,您将无法开发应用程序。聘请可以回答此问题的高级开发人员。如果你愿意,可以在他们的采访中询问他们。

    【讨论】:

      【解决方案5】:

      “每秒最多处理约 100,000 个插入命令”- 这是峰值还是正常操作?如果正常运行,你的“存储的数百万条记录”很可能是数十亿……

      对于这样的问题,我认为进一步了解业务“问题”很有用 - 因为这些要求不重要!问题是这个问题是否证明了这一点 “蛮力”方法,或者是否有其他方法可以实现相同的目标。

      如果需要,您可以考虑是否有聚合/转换数据的方法(批量加载数据/丢弃对同一记录的多个更新/加载到多个数据库,然后聚合下游作为一组 ETL ) 以便更轻松地管理此卷。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-17
        • 2023-03-12
        • 1970-01-01
        • 2010-12-14
        • 2011-02-23
        • 1970-01-01
        相关资源
        最近更新 更多