1

在应用程序中,我需要更新大量记录/将大量记录几乎同时插入数据库。

是否有任何此类插入/更新限制会成为我的应用程序的瓶颈?我可以做些什么来最大化插入/更新率。

另外,关于更新,同一条记录不会被更新——一张表中的许多记录(可以通过键清楚地识别)将被更新——这是否意味着更新率可以显着提高?

我上面的问题适用于关系数据库和 NoSQL 数据库。

我现在正在考虑使用像 SQL Server/MySQL 这样的关系数据库——但是在这个阶段我也愿意考虑像 Mongo DB/Dynamo DB 这样的 noSQL 数据库——我最终选择的 db 取决于哪个数据库提供更高的插入/更新限制.

4

1 回答 1

2

一般注意事项

最大 R/W 容量很大程度上取决于硬件(HDD 与 SSD)和节点数量。另外,我相信,由于没有强制执行 ACID 和一致性,因此更容易扩展 NoSQL 以进行写入操作。

对于问题的 DynamoDB 部分

DynamoDB 是一项托管服务。您保留给定的 R/W 容量(所谓的“单位”),Amazon 会为您扩展您的数据库。但是,仍然有几点需要考虑:

  • 读取的最大保留吞吐量为 10,000
  • 写入的最大保留吞吐量为 10,000

基本上,您每秒每次一致读取或写入以及每个不可分割的 kB 消耗 1 个单位。(嗯,实际上,它甚至更棘手)。

但是,为了扩展,您的表在partitions之间进行拆分。保留的吞吐量也是如此。因此,为了达到最大可能的吞吐量,您要求的密钥需要尽可能均匀地分布。

这些是数据库方面的考虑。

客户端,还需要考虑多个因素:

  • TCP/HTTP 延迟
  • 一次最大打开套接字

您可以使用 batch_get_item 和/或 batch_write_items 进行分组以减少延迟影响。

例如,我从来没有能够从我的办公室计算机上达到预置的 1000 写入,因此,您最好使用多个实例/服务器来发出您的数据库请求。

TL;DR (DynamoDB)

  • 您保留吞吐量,Amazon 扩展以提供它
  • 还有一些与内部实现相关的问题
  • 需要优化延迟
  • 需要仔细并行化

我不是其他数据库类型的专家,所以我只能猜测客户端的考虑会以某种方式相同,对于 MySQL 来说可能更少,因为它使用二进制协议。此外,您可能必须管理数据库。

于 2012-08-30T21:53:52.277 回答