【问题标题】:Database and design assistance for large number of simple records大量简单记录的数据库和设计辅助
【发布时间】:2013-01-16 03:34:39
【问题描述】:

我希望在选择非常适合我必须编写的 Web 应用程序的数据库和布局方面获得一些帮助(如下所述),考虑到大量记录和它们需要的事实,我有点难过可以通过任何方式查询。

Web 应用程序基本上允许使用构成记录的任何条件组合查询大量记录,日期是唯一的强制性项目。一条记录仅包含八项(如下),但每天将有大约 300 万条新记录,重复记录很少。当日数据会不断实时插入数据库中。

我知道最大的兴趣将是过去 6 个月 -> 1 年的数据,但其余数据仍需要用于相同类型的查询。

我不确定哪个数据库最适合这个,也不知道如何构建它。数据库将位于相当强大的服务器上。我基本上想从一个好的数据库设计开始,看看查询是如何执行的。然后我可以判断我是否愿意进行优化或投入更强大的硬件。我只是不想重做基本数据库设计,如果我们进行大量优化,我们有时间但没有 $$$,一开始没问题。

我们需要使用开源的东西,而不是像 oracle 这样的东西。现在我倾向于 postgres。

一条记录包括:

1 个日期
2 无符号整数
3 无符号整数
4 无符号整数
5 无符号整数
6 无符号整数
7 个文本 16 个字符
8 个文本 255 个字符

我正计划创建年度模式、月度表,并确定在日期为记录表建立索引。

在我分析使用模式以查看最流行的查询是什么之后,我可能能够再添加一两个索引。我可以在应用程序网站上做很多技巧,比如缓存流行的查询等等,这确实是我需要帮助的数据库方面。字段 8 将有一些重复的值,因此我计划将该列作为 id 加入查找表中以加入。除此之外,我猜其余的字段都将在一张月表中......

我想我也可以将它分解为每周表,并使用视图进行查询,这样应用程序就不必处理尝试组装复杂的查询......

无论如何,非常感谢任何反馈或帮助!

【问题讨论】:

  • 会查询个别记录,还是只查询汇总结果(统计数据),例如每月具有“字段 2 = x”的条目数?
  • 肯定会考虑按日期范围进行分区。虽然 PostgreSQL 的分区相当原始,但只要你在日期之类的事情上进行分区就可以了。

标签: database postgresql database-design


【解决方案1】:

一些简短的建议...

  1. 每天 300 万条记录已经很多了! (至少我是这么认为的,其他人可能甚至不会眨眼。)我会尝试编写一个工具来插入虚拟记录,看看 Postgres 之类的东西如何处理一个月的数据。

  2. 最好研究一下 NoSQL 解决方案,它为您提供开源 + 可扩展性。从 Couchbase 和 Mongo 开始。如果您要在线保存数月的数据以进行实时查询,我不确定 Postgres 将如何处理 9000 万条记录。也许很棒,但也许不是。

  3. 考虑在您决定使用的任何系统中使用“离线”数据库。你将实时数据保存在最好的机器上,它已经准备好了,但是你将旧数据移到另一个更便宜的服务器上(阅读:更慢)。通过这种方式,您始终可以回答查询,但有些查询比其他查询要快。

【讨论】:

    【解决方案2】:

    根据我的经验,主要使用具有相似记录插入频率(数十亿行表)的 Oracle,您可以通过仔细分区数据(可能按日期,在您的情况下)和索引表来实现良好的 Web 应用查询性能.您如何准确地处理您的数据库架构将取决于很多因素,但是网络上有很多很好的资源可以帮助您获得这些方面的帮助。

    听起来你的数据库比较扁平,所以也许其他数据库解决方案会更好,但 Oracle 一直对我很有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2010-11-21
      • 1970-01-01
      • 2014-02-17
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多