关于数据库更新/插入速率限制的一些查询(基于 SQL 或基于 NoSQL)

Posted

技术标签:

【中文标题】关于数据库更新/插入速率限制的一些查询(基于 SQL 或基于 NoSQL)【英文标题】:some queries regarding updates/inserts rate limits for a database(SQL-based or NoSQL based) 【发布时间】:2012-08-30 21:28:39 【问题描述】:

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

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

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

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

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

【问题讨论】:

当然,我没有使用过 NoSQL 风格的数据库,但如果您选择“传统”RDBMS 的唯一考虑因素是“速度”,那可能是错误的标准。据我了解,NoSQL 通常应该处理一组不同的问题,通常(尤其是?)非结构化数据。 @X-Zero 我基本上是在创建一个并行处理框架——主要任务是在并行任务完成/抛出错误/启动时更新/插入记录——因此主要我的考虑是同时更新/删除——记住你的观点,我什至可以将数据库的其余部分(用于并行处理框架)保存在单独的数据库/数据库类型中——但我确实需要最大可能的插入率/updates 用于通知任务开始/更新/完成... 取决于您的管理方式,您需要的不是速度,而是恢复/ACID 合规性的能力(NoSQL 风格的数据库往往会遇到问题)。所有主要的现代 RDBMS 都可以有多个并发用户。 【参考方案1】:

一般注意事项

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

对于问题的 DynamoDB 部分

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

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

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

但是,为了扩展,您的表被分成分区。保留的吞吐量也是如此。所以,为了达到最大可能的吞吐量,您要求的密钥需要尽可能均匀地分布。

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

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

TCP/HTTP 延迟 一次打开​​的最大套接字数

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

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

TL;DR (DynamoDB)

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

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

【讨论】:

每秒 10,000 次读取/写入是表或表中分区的最大速率吗?如果是用于分区,那么我可以通过编程方式创建/删除分区吗?谢谢... 这个限制是针对每个表的。如果您请求亚马逊,您可能会获得更高的限制。您对分区完全没有控制权。你甚至不知道你有多少。根据我的测试,我知道最小值为 2,因此吞吐量为 1000。

以上是关于关于数据库更新/插入速率限制的一些查询(基于 SQL 或基于 NoSQL)的主要内容,如果未能解决你的问题,请参考以下文章

批量查询超出速率限制

Adwords API 每秒查询次数限制

确定请求的速率限制

每秒仅插入 1 次后的 403 速率限制

每秒仅插入 1 次后的 403 速率限制

关于oracle in 的1000条限制