数据库选择:高写,低读

时间:2011-07-12 15:18:49

标签: database distributed

我正在构建一个用于记录历史数据的组件。最初我希望它能做到大约30次写入/秒,而不到1次读取/秒。

永远不会修改数据,只会添加新数据。读取可能是用新记录完成的。

需求可能会迅速增加,预计一年内将达到约80次/秒。

我可以选择分发我的组件并使用公共数据库(如MySql),或者我可以使用MongoDb等分布式数据库。无论哪种方式,我都希望数据库能够很好地处理写入。

数据库必须是免费的。开源将是一个加号: - )

注意:记录是可变大小的纯文本,通常为50到500个字。

2 个答案:

答案 0 :(得分:8)

你的问题可以通过几种不同的方式解决,所以让我们分解一下,看看你已经列出的个人要求:

  1. 写入 - 听起来你正在做的大部分内容只是以相对较低的音量(80次/秒)写入。几乎任何市场上具有合理存储后端的产品都能够解决这个问题。您正在查看要保存的50-500个“单词”数据。我不确定是什么构成一个单词,但为了论证,让我们假设一个单词平均为8个字符,所以你的数据将是某种元数据,一个键/时间戳/任何加上400-4000字节的字节。除了不同RDBMS的实现特定细节,这仍然很正常,我们可能最多写入(包括记录开销)每个记录4100字节。最大限度为每秒328,000字节,或者正如我所说的那样,不是很多写作。

  2. 删除 - 您还需要能够删除您的数据。我没有太多可以说的。删除是删除。

  3. 阅读 - 这里的事情变得棘手。你提到它主要是主键,读取是在新数据上完成的。我不确定这些是什么意思,但我不认为这很重要。如果你只进行关键的查找(例如我想要记录8675309),那么生活是美好的,你几乎可以使用任何东西。

  4. 联接 - 如果您需要能够编写数据库处理它们的实际联接,那么您已经编写了自己的主要非关系数据库产品。

  5. 数据大小/数据生命 - 这是事情变得有趣的地方。您估计您的写入速度为80 /秒,我猜每条记录为4100字节或每秒328,000字节。一天有86400秒,这给我们28,339,200,000字节。可怕!这是3,351,269.53125 KB,27,026 MB,或大约26 GB /天。即使您将数据保留1年,也就是9633 GB或10TB的数据。您可以从云托管服务提供商处租用1 TB的数据,每月约250美元,或者从EqualLogic等SAN供应商处购买,价格约为15,000美元。

  6. 结论:我只能想到无法处理此负载的几个数据库。 10TB变得有点棘手,需要一些管理技能,您可能需要查看某些数据生命周期管理技术,但几乎任何RDBMS都应该完成这项任务。同样,几乎任何非关系/ NoSQL数据库都应该完成这项任务。实际上,几乎任何类型的数据库都应该完成任务。

    如果您(或您的团队成员)已经具备特定产品的技能,请坚持下去。如果您的问题域中存在特定产品,请使用该产品。

    这不是需要任何类型的分布式魔法独角兽粉末的问题类型。

答案 1 :(得分:-1)

对于MySQL,我会建议你使用没有任何索引的InnoDB,期望在主键上,即使这样,如果你可以跳过它们也会很好,以便输入流不受干扰。

索引优化了阅读,但降低了写作能力。

您也可以使用PostgreSQL。你还需要跳过索引,但你不会选择引擎,它的功能也非常强大。

您想要的这种方法实际上在某些解决方案中使用,但是有两个数据库服务器,或者至少有两个数据库。第一个是接收大量新数据(您的情况),而第二个与第一个进行通信并将其存储在结构良好的数据库中(包含索引,规则等)。然后,当您需要读取或创建数据快照时,您可以引用第二个服务器(或第二个数据库),您可以在其中使用事务等。

您应该查看Oracle Express(我认为这是它的名称)和SQL Server Express Edition。最后两个有更好的性能,但也有一些限制。要有更详细的图片。