【问题标题】:SQL Server database size limit on Azure, what to do?Azure 上的 SQL Server 数据库大小限制,该怎么办?
【发布时间】:2017-08-16 10:58:33
【问题描述】:

这可能是我作为软件开发人员缺乏基础架构知识的问题。

我正在开发一个平台来存储应用程序数据日志。到目前为止很简单的东西。有一个 SQL Server 数据库,其中有一个名为 logs 的表,每一行都是与保存该日志的用户相关联的日志。这将使用 Azures SQL 数据库。

进行中,假设我有 10,000 个用户,将达到数据库的限制(250gb,甚至最终 1TB)。

一个明显的答案是清除旧数据。但是,如果始终需要这些数据,这并不是真正的答案。我想这并不是上述日志应用程序特有的问题,通常是当您的数据库变得太大而无法由一个数据库保存时该怎么办。

我一直听说水平扩展,尤其是 NoSQL 数据库。但是,我需要知道去哪里以及研究/学习什么。当您作为开发人员工作时,您会学习如何编写应用程序,而不一定是如何扩展它们,我需要知道如何去做

【问题讨论】:

    标签: sql-server database azure


    【解决方案1】:

    也许您可以为此考虑使用 Azure 表存储而不是 SQL 数据库。 这是一个非常基本且易于使用的 NoSQL 选项,而且由于您似乎无论如何都在使用 Azure,因此可能值得研究一下。 这是 Azure 文档中的 Getting Started 页面。

    【讨论】:

    • 表存储是一种完全不同类型的数据存储,具有不同的查询能力。它们不可交换。而且...这并不能解决 OP 的问题。
    • 表存储或许能解决OP的真正问题——存储空间。
    • 在不知道 OP 将如何查询的情况下,这不一定是真的。 OP 在日期范围查询(或查询不是分区键或行键的任何属性)方面将面临更多挑战。并且在使用 SQL Server 特定的报告工具时会遇到挑战。
    • 另外,OP 根本没有谈到 what 需要查询。如果只是日志,是否真的有必要让所有日志都可以访问,或者只有最近的日志?如果是后者,OP 可以归档日志(例如,在表存储或 blob 存储中),它可以访问但不可查询。
    • 在这种特殊情况下,它更像是一个一般的 SQL 问题。选择 SQL 而非表存储的决定并不是问题的重点,尽管正如 @DavidMakogon 所提到的,这取决于查询的灵活性
    【解决方案2】:

    阅读SQL Server Stretch Database。这可能是您所追求的。

    【讨论】:

    • 这绝对是个好消息,但仍有 240TB 的限制。如果每个客户每天有 1gb 的日志、30 天的保留期和 10,000 个客户,那就是达到了限制。尽管这种使用水平和客户群是理论上的且不太可能,但仍有可能
    • 阅读这篇文章它扩展到 1PB docs.microsoft.com/en-us/azure/sql-data-warehouse/… e.g.该空间独立于 tempdb 或日志空间,因此该空间专用于永久表。聚集列存储压缩估计为 5 倍。当所有表都是聚集列存储(默认表类型)时,这种压缩允许数据库增长到大约 1 PB。
    • 如果您可以将其拆分为多个 DBS,那么您将绕过限制
    【解决方案3】:

    一般来说,对于 SQL Server,你有三种选择--

    • 垂直缩放
    • 水平缩放
    • 清除/归档旧数据

    纵向扩展意味着获得更大容量的更大服务器。在 Azure 中,这意味着为下一个大小付费,直到空间用完。

    水平扩展意味着获得多个服务器并分发数据。对于诸如日志记录之类的事情,您可以每年创建一个新数据库,并根据日期范围知道将查询发送到哪个数据库;例如。

    清除或归档旧数据对于实际场景来说是一个不错的选择,因为您可能不需要 30 年前的日志文件。您可以将数据转储到更具成本效益的存档中,并让您的 SQL Server 数据仅加载相关数据(例如过去几年的日志记录)。

    【讨论】:

    • 清除旧数据肯定会在这里完成,但是如下所述,即使有 30 天的保留限制也可以很快达到。垂直缩放并不能真正解决问题,因此水平缩放似乎是关键。理想情况下,我需要一个解决方案,我可以在其中插入和查询单点通信,并搜索相关数据库
    【解决方案4】:

    将其拆分到多个数据库并使用弹性查询。

    https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-query-overview

    或者考虑为日志使用另一种存储格式。如前所述,天蓝色的表可能会更好。看这里Strategy for storing application logs in Azure Table Storage

    您没有提到的重要一点是:如何查询这些日志?按用户?按日期?你能识别冷热数据吗?

    【讨论】:

    • 在弹性查询的情况下,这会是无缝的吗?我的应用程序在哪里连接到一个源,而 Azure 完成所有工作以拆分到各种数据库?或者我将负责将我的数据库插入到适当的数据库中,这为我提供了交叉查询的能力
    • 我以前从未实现过它,但我认为是这样(一旦你设置了分片)我建议你阅读这篇文章,或者你可以等待比我更了解它的其他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多