【问题标题】:Architecture of a database with a lot of records具有大量记录的数据库的体系结构
【发布时间】:2011-06-28 14:55:37
【问题描述】:

我必须为不同类型的人群提供服务。该服务包含一个门户网站和一个包含大量记录的网络服务(由智能手机查询)。每个种群都有自己的记录集,种群之间共享的记录很少。

每个群体都有自己的事件、新闻、用户...许多用户将使用此服务,数据库表(将包含这些事件、新闻和用户)将快速增长。此表中的选择数将是插入数的 100 倍。 最后,我打算使用 MySQL 作为数据库引擎。

我的问题是架构问题:

  • 为所有人群提供一个公用表格(一个表格新闻、一个表格事件......对于所有人群)和一个允许过滤的列是否更好?还是每个人口有一个数据库更好(每个人口都有自己的事件表,自己的新闻表......)?
  • 如果按人口计算的数据库架构更加优化,我该如何处理共享对象?

感谢您的提示和建议!

克洛德

【问题讨论】:

  • 您是否调查过针对不同人群使用单个数据库和不同表? IE。 Event_Pop_A, Event_Pop_B... News_Pop_A... 根据您的使用场景,这可能有助于您必须进行跨人群查询(例如使用 UNION)
  • 不,我没有。似乎很难维护/管理,但解决方案可以工作
  • 这取决于您创建新种群的频率。如果这是您可以设想的很多事情,那么我的建议是不切实际的。如果人口集是稳定的,并且用户从一个人口到另一个人口的移动很少或没有,那么它可能会起作用
  • 好的,谢谢您的建议。事实上,每周都会有 2 到 10 个新人口...我会在我的另一部分服务中使用 ure 建议

标签: database database-design


【解决方案1】:

您可以为每个新闻、事件等创建一个表,其中将包含所有人口,并带有一些可以区分人口的列,您可以在该列上应用分区。这样,您对人口的高频选择将仅访问相应的分区而不是全部。您也可以进行分区索引。

Mysql分区可以参考这里http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html

关于共享列,我猜如果共享百分比较小,您可以复制行,否则您最终将访问多个分区进行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 2019-05-31
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    相关资源
    最近更新 更多