【问题标题】:What is a good way to manage large ever growing tables in a database?管理数据库中不断增长的大型表的好方法是什么?
【发布时间】:2015-05-07 15:16:30
【问题描述】:

我正在构建一个用于保存病历的 Web 应用程序。此应用程序的一项要求是记录患者数据的所有更改(查看、创建、更新、删除)以及系统中几乎所有其他有用信息(登录、cron 运行、数据导出等)。

我正在将数据存储到当前工作正常的数据库表中。然而,这张表很可能会很快变得不守规矩,并使数据库膨胀。我不允许删除日志条目。

我目前的计划是选择任意大小(例如 100 万个条目,大但仍可管理)。当表格达到 100 万个条目时,我会将 100,000 个最旧的条目移动到一个文件中,并将其存储到我们的文件服务器上。

有没有人对此问题有任何经验,对如何处理它有其他/更好的想法?

其他信息: 我主要担心的是不会从这些数据中删除任何内容。但是,数据不一定需要在几个月后访问。由于这些数据可以在几年内逻辑上达到 10 亿个条目(并且我有 300 个该数据库的副本,其中都包含此表),因此管理大小和性能的好方法是什么。这张表需要放在寻呼机上,当它突破 100 万时显然会成为一个问题,更不用说 10 亿了。

【问题讨论】:

  • 你可能对Table Partitioning很熟悉!
  • 如果 100 万个条目是“大”的,那么您需要看一下整体架构。许多 RDBMS 平台在数千万甚至数亿行的情况下运行良好。正如@PeterSchneider 所说,看看表分区,但这种关于什么是小型数据库的高级策略是值得怀疑的。
  • @PittsburghDBA 重点不在于 100 万个条目。关键是该表永远不会删除任何内容,并且会一直在增长。我只是在为永远不会删除数据的表寻找可扩展的解决方案。如果它能让我的观点更清楚,这张表可能会在几年内达到 10 亿或更多。
  • 您的实际 DBMS 是什么?存储数十亿行是专门用于数据仓库的 DBMS 中的一项常见任务。但是无论如何你都需要一个更大的系统,这更昂贵......
  • @dnoeth 我目前正在使用 SQL Server,但可能会在表变得太大之前迁移到 MySQL。

标签: sql database-design


【解决方案1】:

这样的情况是为分区量身定做的。使用分区策略,您可以将数据跨越多个表。这有助于平衡 I/O、加快特定于分区的查询的访问时间等。这本身就是一门学科,分区键的选择至关重要。在许多情况下,例如像这样的日志数据,人们经常根据日期时间值进行分区。

Partitioned Tables and Indexes (SQL Server)

【讨论】:

  • 我认为这让我对尺寸有一个健康的看法。我计算出该表将记录大约 400 万个条目/年以用于最重的使用。因此,分份可能就足够了,归档至少可以推迟几年。感谢您的回复。
  • 感谢您接受的回答。最好的祝愿您的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2013-02-11
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 2016-04-06
相关资源
最近更新 更多