我们部署使用 Cassandra、Elasticsearch 和类似 NoSQL 技术的集群来索引和处理数据。我们竭尽全力确保能够快速使用和处理记录。
我们的一个客户要求我们导出他们的数据,以便他们可以在 SQL Server 中进行交叉引用。自从我在 2008 年使用 SQL Server 以来,已经过去了很长时间,所以我现在对可能性的艺术有点陌生了。
虽然客户有数据中心和一系列技术人员(数据库管理员、开发人员等),但我们处理的部门只有一台运行 SQL Server 2014 的服务器,技术知识有限。这是一个庞大的组织,有严格的监管要求,通常需要数月的文书工作、流程和签字才能分配资源。
他们要求我们将约 7.3 亿条记录转储到他们的数据库中,然后设置一个流程以在新数据到达时推送新数据。从我们的角度来看,这相当简单,但我非常担心他们是否能够真正使用这些数据。
记录长度各不相同,但对于他们想要的信息来说,其长度大约为 4k。
更有趣的是,似乎没人真正知道服务器的规格。看看他们使用的其他设备,我预计会有 64GB RAM、RAIDed 旋转磁盘和 6-12 个核心。
我已经多次提到这可能是一个问题,并且只得到模糊的保证说 SQL Server 可以处理那么多数据。
现在...我知道 SQL Server 在经过分区、正确配置并拥有熟练的 DBA 来调整内容时可以处理那么多数据,但是如果没有人知道他们在做什么来监督整个过程,那么加载到 SQL 实例中的合理数据量是多少呢?
由于分配新设备/员工将是一个耗时的过程,并且他们的项目期限很紧迫,所以我宁愿不要等到事情变得非常糟糕。
我知道没有人能用这些模糊的信息给我一个硬性规定,但我应该在什么时候关注呢?10M / 100M / 500M / 1B?
答案1
我认为我无法给你一个神奇的“担心”数字,低于该数字的任何东西都是“可以的”,而高于该数字的任何东西都是“糟糕的”。
话虽如此,至少在我看来,你的问题中还是存在一些危险信号:
- “似乎没人真正知道该服务器的规格是什么。”
- “他们要求我们将约 7.3 亿条记录转储到他们的数据库中,然后建立一个流程来推送新数据。”
- “我们所处理的部门只有一台运行 SQL Server 2014 的服务器,而且技术知识有限。”
- “这是一个庞大的组织,具有严格的监管要求,通常需要数月的文书工作、流程和签字才能分配资源。”
- “记录长度各不相同”
好吧,SQL Server 绝对可以处理这么多的数据。我个人在四台服务器上有超过 20TB 的数据。
但是,SQL Server 与 Microsoft 的其他一些产品非常相似,如果您有几个不经常使用的小型数据库,那么您可以将它放在角落里,对它小心一点,它就会立即恢复正常,不会困扰您(至少不会立即困扰您),但横向扩展则需要更多的思考和努力。
我特别关心他们是否计划对服务器进行适当的维护。在没有事务日志备份的情况下定期“将约 730M 条记录转储到他们的数据库中”将很快耗尽他们的磁盘空间。
我也不满意以下几点:
他们试图从包括我们在内的三个独立系统获取输出。记录与他们网络上的字段相关,因此具有在所有三个数据集中(大致)相同的 URI。他们想要三个表,每个提供商一个,然后将它们连接在一起以回答问题。他们计划在 SSMS 中与几位对 SQL Server/数据库有一定了解的员工一起完成这一切
如果他们决定对服务器运行糟糕的查询,我不确定服务器是否会高兴。在我看来,数据可能没有规范化和/或可能不包含好的连接键。
最后但并非最不重要的一点是,我有过非常不愉快的经历,“我们决定通过[让用户管理自己的服务器]/[让邮件室的好孩子来做]/[告诉他们我们不支持,但他们可以做任何他们想做的事情]来省钱。” 最终总是花费大量金钱和时间去修复。