Azure 数据库中可以拥有的行数的推荐做法
Recommended practices for the amount of rows you can have in an Azure Database
是否有关于 SQL 数据库可以处理多少的指南或实践?
如果您有一个包含以下列的 table:
Id, 整数
更新,位
状态,nvarchar(256)
路径,nvarchar(256)
类别 1,nvarchar(256)
类别 2,nvarchar(256)
所有列都已编入索引。
我们每秒更新 10 个条目。当 Azure 数据库性能下降时,是否有任何指导方针。我们需要一个有 4 亿行的存储,我担心 Azure SQL 数据库在这种情况下会变慢(除非你购买一些 4000 美元的计划)。除了更新数据库之外,我们还需要能够查询具有特定状态或已更新的行数。因此 table 存储将符合此要求。
任何有关此类场景的经验都会有所帮助,或者 SQL 数据库的一些替代方法。
这是一个很好且非常常见的问题,所以让我们试着给它一个完整的、希望是明确的答案。
首先要注意的是:存储 4 亿行还是 1000 万行并不重要。这完全取决于您打算用它做什么。如果您需要一次访问一行或几行,使用可以使用索引的搜索条件,您就可以开始了。性能将始终非常快(获取数据的毫秒数 - 一位数或两位数取决于您购买的服务级别 - 然后,根据网络带宽,其他几毫秒到 return 数据。如果相反,您计划扫描数据;例如,对类别等于某项的所有行进行分组和计数,那么您需要更多的原始功能,因为您将能够尽可能快地扫描数据。这适用于SQL 和任何其他数据库(关系或无SQL)。
要记住的第二件重要的事情。您拥有索引的事实并不意味着它们将被使用。我不会在这里详细介绍,但一般来说,索引只有在限制搜索 space 很多时才有用。如果您有 4 亿行,并且对于其中 90% 的行,您将类别列设置为 "ACME"...那么如果您搜索 "ACME",您肯定不会使用索引与更幼稚的table(扫描)相比,这将是太昂贵了。聚簇索引和列存储索引除外……如果您想开始了解更多信息,可以在此处阅读:https://medium.com/sql-server-for-the-better-developer
第三点:每秒10次插入几乎没有。除了一些非常基本的免费套餐外,您可以轻松地每秒插入数百行,作为一般基准。
最后一点:你提到一个用例是 "be able to query for how many rows, that has a specific status, or has been updated." 如果你想优化你的成本,并且愿意将一点数据一致性可处理性转移到应用程序或中间层,你可以写信给您的大 table 单个事务并创建其他 table 以更新一些预先聚合的数据并准备好查询,而无需扫描整个 table。有点 "materialized view" 方法。如果您不能这样做,例如因为预先聚合的 table 将与 400M 行 table 本身一样大,那么您 需要 列存储(这在 Azure SQL) 中可用,因此聚合将returned 非常非常快。
现在问你一个问题:你正在寻找的预算是多少?是什么让您认为 Azure SQL 可能 "too slow" 适合您的场景?
PS
完全公开,我现在是 Azure SQL 的项目经理。我最近加入之前,我不得不处理与你所问的非常相似的事情。有关该体验的更多信息,请点击此处:https://medium.com/@mauridb/from-elasticsearch-back-to-sql-server-597249c16a9d
是否有关于 SQL 数据库可以处理多少的指南或实践?
如果您有一个包含以下列的 table:
Id, 整数 更新,位 状态,nvarchar(256) 路径,nvarchar(256) 类别 1,nvarchar(256) 类别 2,nvarchar(256)
所有列都已编入索引。
我们每秒更新 10 个条目。当 Azure 数据库性能下降时,是否有任何指导方针。我们需要一个有 4 亿行的存储,我担心 Azure SQL 数据库在这种情况下会变慢(除非你购买一些 4000 美元的计划)。除了更新数据库之外,我们还需要能够查询具有特定状态或已更新的行数。因此 table 存储将符合此要求。
任何有关此类场景的经验都会有所帮助,或者 SQL 数据库的一些替代方法。
这是一个很好且非常常见的问题,所以让我们试着给它一个完整的、希望是明确的答案。
首先要注意的是:存储 4 亿行还是 1000 万行并不重要。这完全取决于您打算用它做什么。如果您需要一次访问一行或几行,使用可以使用索引的搜索条件,您就可以开始了。性能将始终非常快(获取数据的毫秒数 - 一位数或两位数取决于您购买的服务级别 - 然后,根据网络带宽,其他几毫秒到 return 数据。如果相反,您计划扫描数据;例如,对类别等于某项的所有行进行分组和计数,那么您需要更多的原始功能,因为您将能够尽可能快地扫描数据。这适用于SQL 和任何其他数据库(关系或无SQL)。
要记住的第二件重要的事情。您拥有索引的事实并不意味着它们将被使用。我不会在这里详细介绍,但一般来说,索引只有在限制搜索 space 很多时才有用。如果您有 4 亿行,并且对于其中 90% 的行,您将类别列设置为 "ACME"...那么如果您搜索 "ACME",您肯定不会使用索引与更幼稚的table(扫描)相比,这将是太昂贵了。聚簇索引和列存储索引除外……如果您想开始了解更多信息,可以在此处阅读:https://medium.com/sql-server-for-the-better-developer
第三点:每秒10次插入几乎没有。除了一些非常基本的免费套餐外,您可以轻松地每秒插入数百行,作为一般基准。
最后一点:你提到一个用例是 "be able to query for how many rows, that has a specific status, or has been updated." 如果你想优化你的成本,并且愿意将一点数据一致性可处理性转移到应用程序或中间层,你可以写信给您的大 table 单个事务并创建其他 table 以更新一些预先聚合的数据并准备好查询,而无需扫描整个 table。有点 "materialized view" 方法。如果您不能这样做,例如因为预先聚合的 table 将与 400M 行 table 本身一样大,那么您 需要 列存储(这在 Azure SQL) 中可用,因此聚合将returned 非常非常快。
现在问你一个问题:你正在寻找的预算是多少?是什么让您认为 Azure SQL 可能 "too slow" 适合您的场景?
PS 完全公开,我现在是 Azure SQL 的项目经理。我最近加入之前,我不得不处理与你所问的非常相似的事情。有关该体验的更多信息,请点击此处:https://medium.com/@mauridb/from-elasticsearch-back-to-sql-server-597249c16a9d