【问题标题】:SQL Database design for huge datasets大型数据集的 SQL 数据库设计
【发布时间】:2011-11-24 10:29:57
【问题描述】:

我有一个客户,其数据结构如下……对于每个患者,可能有多个样本,每个样本在处理后可能有 400 万个数据对象。每个患者的最大样本数为 20。因此,单个患者最终可能有 8000 万行数据,当然最终会有数百个患者。

在建立一个数据库来存储对象(每个对象包含大约 30 个统计和测量字段)时,挑战非常明确 - 如何管理如此大量的数据?

我在想我应该有一个数据库,每个样本都有一个表 - 所以每个表最多可能有 400 万条记录。

我的一位同事提出了一个有趣的建议,即更进一步——为每个患者创建一个新数据库,然后为每个样本创建一个表。他的想法是,每个患者有 1 个日志,能够以每个患者为基础移动数据库等是很好的。我不能不同意他的观点。

这合理吗?出于某种原因,拥有许多数据库是不是一个坏主意?

想法?谢谢!

【问题讨论】:

  • 您将对这些数据进行何种类型的搜索/查询?关系数据库引擎旨在处理单个表中的数百万行......但如果您每次访问数据库时要拉回 400 万行,您可能想要使用 RDBMS......也许是什么像 MongoDB 或 Apache Cassandra 这样面向文档?
  • @bobweinholt 所以我唯一需要对这些数据做的就是运行统计数据。大多数统计数据很简单(平均值、模式、标准差等),有些可能更高级。所以我在想 SQL CLR 或 T-SQL。但我永远不需要将所有数据拉出来。它只是为了存储计算。

标签: sql-server sql-server-2008 database-design large-data-volumes


【解决方案1】:

虽然从隐私和迁移的角度来看,这个想法很有趣,但每个患者拥有一个数据库并不是一个好主意。考虑为每个患者数据库管理、备份和保存文件。我什至不确定 DBMS 是否可以在一个实例或服务器中同时处理数百万个数据库。

我要做的是,接受体积数据作为实时数据,并以您选择的参数和表格类型对其进行处理。让 DBMS 担心它的进度。确保您有一个允许纵向扩展和横向扩展表的部署模型。每个实体一个表,至少是明智的,因此对于患者、测量等而言。

只是,做你作为开发人员擅长的事情,让 DBMS 做它的创建目标。

【讨论】:

  • 我认为不会有数百万个数据库——每位患者只有一个,而且我认为患者负载最多为数千个。还是很多。我认为我的同事认为管理这数千个表和一个庞大的日志文件会比独立数据库的维护和移动成本更高。
  • 患者人数取决于您要服务的机构。我指的是大学医院之类的数字。
【解决方案2】:

在处理这么多数据时,您肯定会想探索 MySQL 和 RDBMS 的替代方案。您是否研究过任何 noSQL 解决方案? (即键值存储)。有几种开源解决方案,其中一些将立即不适用于此应用程序,因为任何数据丢失都可能是不可接受的。

也许可以尝试查看 Apache 的 Cassandra http://cassandra.apache.org/。它是一个分布式数据库系统(键值存储),但也可以在单个节点上运行。它将允许您将每个患者的所有数据存储在单个键值“即 Patient1”下,然后您可以从那里将数据组织成最适合在应用程序中查询的任何键值结构。

【讨论】:

  • 我一定会去看看 cassandra,听起来很有趣!哦,但是我可以在数据列上运行统计信息吗?正如我所提到的,SQL 内置了其中一些东西,我将需要它们。卡桑德拉能做到吗?
  • @Nicros Cassandra 与 MySQL 不同。在存储和查询方面,您将不得不改变对数据本身的看法。如果您非常习惯 RDBMS,一开始它会有点奇怪,但它的强大功能显而易见。这是一篇非常棒的文章,它逐点解释了 Cassandras 数据模型的工作原理。您可能需要多次阅读它:)。 arin.s3.amazonaws.com/pub/docs/WTF-is-a-SuperColumn.pdf
猜你喜欢
  • 2019-08-14
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
相关资源
最近更新 更多