我应该使用哪个DB?

时间:2010-08-19 16:08:29

标签: database

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

我的要求是:

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

您建议我使用哪个DB?

谢谢!

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

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

没有人推荐过no-sql数据库。他们真的对这种要求不好吗?

5 个答案:

答案 0 :(得分:3)

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

我所知道的可以处理如此大规模的数据库包括: 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+插入一秒钟是一个巨大的数字,无论你选择什么,你都在寻找在硬件上花大钱来处理这个问题。

答案 1 :(得分:2)

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

如果您认为使用一台物理机器是可行的 - 那么您的方法就是错误的。如果您知道应该使用多台机器 - 那么您为什么询问数据库?数据库并不像您使用它那样重要。

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

答案 2 :(得分:0)

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

有了这样的问题,我认为进一步理解业务“问题”是有用的 - 因为这些都是非平凡的要求!问题是问题是否合理  “蛮力”的方法,或者是否有其他方式来实现同样的目标。

如果需要,那么您可以考虑是否存在聚合/转换数据的方法(批量加载数据/将多个更新丢弃到同一记录/加载到多个数据库,然后将下游聚合为ETL的组合) )以便更容易管理这个卷。

答案 3 :(得分:0)

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

另外,也许每秒可以批量加载100,000个插件,在12小时内,每秒100,000行就可以达到72,000,000行,所以也许你想要存储数十亿行?

答案 4 :(得分:0)

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

单个线程无论如何都无法执行那么多命令,所以我希望有100-1000个线程来执行这些插入。

根据您的应用程序,您可能还需要某种高可用性。除非你做的事情像科学的应用程序。

我的建议是雇用一个对你有可靠答案的人 - 最好是以前做过的人 - 如果你不知道,你将无法开发应用程序。聘请能够回答这个问题的高级开发人员。如果你愿意,可以在他们的面试中询问他们。