Sql 需要数据库设计建议

Sql 需要数据库设计建议,sql,mysql,caching,memcached,Sql,Mysql,Caching,Memcached,我是一家电信公司的一名独立开发人员,我想从任何有时间回答的人那里得到一些数据库设计建议 我每天在一个表中插入约200万行,然后每月对这些表进行归档和压缩。每个月表包含约15000000行。尽管这个数字逐月上升 对于我在上面所做的每一次插入,我都会将属于同一行的数据组合起来,并创建另一个“相关”表。此表当前未存档,因为我需要确保不会错过对相关表的更新。(希望这是有意义的)虽然一般来说,经过几天的处理,这些信息应该保持相当稳定 所有这些都是完美的。然而,我的公司现在希望对这些数据进行一些统计,这些表

我是一家电信公司的一名独立开发人员,我想从任何有时间回答的人那里得到一些数据库设计建议

我每天在一个表中插入约200万行,然后每月对这些表进行归档和压缩。每个月表包含约15000000行。尽管这个数字逐月上升

对于我在上面所做的每一次插入,我都会将属于同一行的数据组合起来,并创建另一个“相关”表。此表当前未存档,因为我需要确保不会错过对相关表的更新。(希望这是有意义的)虽然一般来说,经过几天的处理,这些信息应该保持相当稳定

所有这些都是完美的。然而,我的公司现在希望对这些数据进行一些统计,这些表格变得太大,无法在合理的时间内提供结果。即使设置了适当的索引

因此,我想在完成以上所有工作之后,我的问题相当简单。我是否应该编写一个脚本,将相关表中的数据分组到较小的表中。或者我应该将查询结果集存储在memcache之类的东西中吗?我已经在使用mysqls缓存了,但是由于对数据存储时间的控制有限,它的工作并不理想

我可以看到使用memcache之类的工具的主要优势:

  • 查询兑现后,我的相关表上没有阻塞
  • 在后端收集器之间共享收集的数据具有更大的灵活性 和前端处理器。(即,自定义报告可以在 后端和这些结果存储在缓存下的一个键 然后与希望查看此报表数据的任何人共享)
  • 如果我们开始与大量客户共享此数据,则会带来冗余和可扩展性
我可以看到使用memcache之类的东西的主要缺点:

  • 如果重新启动计算机/刷新缓存,则数据不会持久
使用MySql的主要优点

  • 持久数据
  • 更少的代码更改(尽管增加了 像memcache这样的东西是微不足道的 (无论如何)
使用MySql的主要缺点

  • 每次我要存储时都必须定义表模板,并提供一组新的分组数据
  • 必须编写一个程序,循环遍历相关数据并填充这些新表
  • 随着数据继续被填充,潜在的增长速度仍然会变慢
很抱歉问了这么长的问题。不管怎样,在这里写下这些想法对我是有帮助的,任何关于处理这类问题的建议/帮助/经验都将不胜感激

非常感谢


艾伦

< P>除了上面讨论的选项之外,您还可以考虑在图片中添加更强大的硬件,如果这是一个选项的话。p> 您的这一点问题表明,这里的根本问题是结果的速度:

然而,我的公司现在希望 对这些数据执行一些统计, 这些桌子越来越大了 以什么方式提供结果 被认为是合理的时间

在结果速度很重要的情况下,在问题上投入更好的/额外的硬件通常比开发新的代码/数据库结构等更便宜

只是一个想法

(我的另一个答案,差异很大,我将单独发布)

两个问题:

您的公司希望生成何种统计数据?

将行插入数据库后,它们是否发生过更改

如果数据在插入后没有改变,那么您可以建立一个单独的“stats”表,在插入新行时或者在插入新行后不久修改/更新该表

e、 g.例如:

  • 当插入与统计数据“B”相关的新行时,在另一个表中为统计数据“B”增加一个数字,分钟为“Y”
  • 每小时对上一小时插入的行运行一个小查询,该查询生成该小时的统计数据并单独存储
  • 如上所述,但每分钟等

不知道细节是很难的,但是根据你的统计数据,这些方法可能有帮助。

< P>如果你想在几天之后对静态数据做一些分析,你也许应该考虑使用像OLAP系统这样的东西。 基本上,这种类型的系统以其格式存储中间统计数据,以便进行快速求和()、平均值()和计数()。。。在大桌子上

我认为你的问题是一个完美的例子,说明了使用它的情况,但也许我这么认为只是因为这是我的工作


看一看。

我在一家情况类似的公司工作,每月有数百万的插页

我们采用了在较小的表中汇总数据的策略,按特定字段分组

在我们的例子中,当执行insert时,它会触发一个函数,该函数对插入的元组进行分类并增加汇总表


我们不时地将最旧的行移动到备份表中,以减少主表的增长。

欢迎使用StackOverflow。长问题通常是好的,因为它们往往会显示一些重要的东西,1)你实际上关心的是得到一个好的答案,而不是“给我一个代码”2)他们往往拥有准确回答问题所需的全部(或至少大部分)信息,毕竟,垃圾输入==垃圾输出。读完这个问题后,我的第一个想法是‘Morez hardz’,但似乎我被打败了。谢谢,不过我猜我的瓶颈现在完全在从硬盘提取数据的I/O上?即使我通过另一台机器/更多驱动器进入等式,我也不确定我会使用什么解决方案?我想当然有SSD驱动器?如果MySql是ca