Azure sql database Azure数据库中可包含的行数的推荐做法

Azure sql database Azure数据库中可包含的行数的推荐做法,azure-sql-database,azure-sql-server,Azure Sql Database,Azure Sql Server,关于SQL数据库能处理多少数据,有什么指导方针或实践吗 如果您有一个包含以下列的表: Id,int 更新,比特 状态,nvarchar256 路径,nvarchar256 类别1,nvarchar256 类别2,NVARCHA256 所有列都被索引 我们将每秒更新10个条目。Azure数据库何时会降低性能,是否有任何指导原则。我们需要一个4亿行的存储,我担心Azure SQL数据库在这种情况下会变慢,除非你购买4K美元的计划。除了更新数据库外,我们还需要能够查询有多少行具有特定状态或已更新。因此

关于SQL数据库能处理多少数据,有什么指导方针或实践吗

如果您有一个包含以下列的表:

Id,int 更新,比特 状态,nvarchar256 路径,nvarchar256 类别1,nvarchar256 类别2,NVARCHA256

所有列都被索引

我们将每秒更新10个条目。Azure数据库何时会降低性能,是否有任何指导原则。我们需要一个4亿行的存储,我担心Azure SQL数据库在这种情况下会变慢,除非你购买4K美元的计划。除了更新数据库外,我们还需要能够查询有多少行具有特定状态或已更新。因此,表存储将符合这一要求


任何与此类场景相关的经验都会很有帮助,或者是SQL数据库的一些替代方案。

这是一个很好且非常常见的问题,所以让我们尝试给出一个完整且希望是明确的答案

第一件事:存储4亿行还是1000万行其实并不重要。这完全取决于你打算用它做什么。如果您需要使用一个可以使用索引的搜索条件一次访问一行或几行,您可以这样做。获取数据的性能通常是非常快的毫秒(取决于您购买的服务级别为一位数或两位数),然后,根据网络带宽,返回数据的时间通常是几毫秒。相反,如果您计划扫描数据;例如,对类别等于某个值的所有行进行分组和计数,然后您需要更多的原始能力,因为您将能够以扫描数据的速度获取数据。这对于SQL和任何其他关系数据库或NoSQL都是如此

第二个要记住的重要事情。您拥有索引这一事实并不意味着它们将被使用。这里我不会详细介绍,但一般来说,索引只有在很大程度上限制了搜索空间时才有用。若您有4亿行,并且对于其中90%的行,您将Category列设置为ACME…好吧,若您搜索ACME,您可以打赌索引不会被使用,因为和更高的naif表扫描相比,它将过于昂贵。例外情况是群集索引和列存储索引…如果您想开始了解更多信息,请阅读以下内容:

第三点:每秒插入10次几乎不算什么。除了一些非常基本的空闲层之外,您可以轻松地每秒插入数百行,作为一般基线

最后一点:您提到一个用例是能够查询有多少行具有特定状态或已更新。如果您希望最大限度地降低成本,并且希望将一点数据一致性责任转移到应用程序或中间层,那么您可以将单个事务写入大表,并创建其他表,以保持一些预聚合数据的更新和准备好进行查询,而无需扫描整个表。某种物化视图方法。如果您不能做到这一点,例如,因为预聚合的表将与400M行表本身一样大,那么您需要一个columnstore,这在Azure SQL中是可用的,这样聚合将很快返回

现在问你一个问题:你想要的预算是多少?是什么让你认为Azure SQL对于你的场景来说可能太慢了

PS
完全公开,我现在是Azure SQL的项目经理。我最近加入了这个组织,之前我不得不处理一些与你要求的非常相似的事情。更多关于这一体验的信息请点击此处:

WOW非常有用-谢谢!它是一家大型企业客户,因此我们得到了所需的预算。我希望不会超过1.5万美元。但是,如果需要更高的价格,那么情况就是这样。我们将有大约3亿行。我增加了大约2000万用于测试,性能仍然可以接受。我想说现在唯一的问题是删除行。我有一个700000 k行的类别。删除它们大约需要1.5个小时。我在这个主题上做了另一个线程,其中建议批量删除,但性能相同。我理解这是预期的,我猜删除速度很慢,每月1.5万美元?花那么多钱,你可以得到非常好的表演。还请记住,如果您不需要在24小时内保持相同的性能,您可以上下扩展以节省更多。关于删除的内容。如果需要删除该数量的行,最好的选择是按类别对数据进行分区,然后在需要删除其所有行时删除分区。