首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL -数据库设计大规模实际部署

MYSQL -数据库设计大规模实际部署
EN

Stack Overflow用户
提问于 2012-08-20 08:31:26
回答 1查看 1.8K关注 0票数 1

我希望听到一些关于mysql数据库设计的意见或想法。

基本上,我有一个tomcat服务器,它接收来自现场大约1000个系统的不同类型的数据。这些系统中的每一个都是独一无二的,并且将报告独特的数据。

发送的数据可以分为频繁数据和非频繁数据。不频繁的数据每天只发送一次,并且不会有太大的变化-它基本上只是基于配置的数据。

在系统打开时,每2-3分钟发送一次频繁数据。并表示系统的当前状态。

这些数据需要为每个系统建立数据库,并且可以在任何给定时间从php页面访问。基本上,对于该领域中的任何系统,PHP页面都需要能够访问该客户端系统上的所有数据并显示这些数据。换句话说,数据库需要显示系统的状态。

信息本身都是基于文本的,而且有很多信息。配置数据(变化不大)是键-值对,目前大约有100对。

我的设计思想是有100+列,每个系统有一行用来保存配置数据。但我担心有那么多的列,主要是因为如果我将来需要添加列,这并不是太好的未来证明。如果我这样做,我也会担心插入速度。这可能会导致一个2000行x 200列的表每秒被访问大约100次,所以我需要在最初的设计中迎合这一点。

我还想知道,是否有任何设计理念迎合了基于引擎的频繁变化和极少变化的数据。这是有意义的,因为我想保持较低的插入/更新时间,并且我不太关心来自php的选择时间。

我也很想知道如何拆分数据。也就是说,如果频繁变化的数据可以通过几种不同的方式进行分类,我是否应该有一堆表来表示数据,并在selects上连接它们?我担心这一点,因为我可能需要生成一份报告来显示所有系统之间的共同属性(即显示具有特定条件的所有系统)。

我希望我在这里提供了足够的信息,以便有人给我指出正确的方向,任何关于这件事的帮助都会很好。或者,如果有人做了类似的事情,并能提供建议,我将非常感激。感谢堆:)

~丹

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-20 09:46:52

我已经在评论中发布了一些问题。如果不更多地了解您正在尝试做什么,就很难为您提供关于快速变化的数据的建议。

对于您的配置数据,不要使用包含100列的表。在生产中,宽表是出了名的难以处理。相反,请使用包含以下列的四列表格:

代码语言:javascript
复制
SYSTEM_ID  VARCHAR    System identifier
POSTTIME   DATETIME   The time the information was posted
NAME       VARCHAR    The name of the parameter
VALUE      VARCHAR    The value of the parameter

这些列中的前三列是您的复合主键。

这种设计的优点是,当您向配置参数集添加(或从配置参数集中减去)时,它会增长(或缩小)。它还允许存储历史数据。这意味着新的数据点可以是INSERTed而不是UPDATEd,后者速度更快。您可以运行每日或每周作业来删除您不再感兴趣保留的历史记录。

(MySQL编辑如果你真的不需要历史记录,那就去掉POSTTIME列,在发布东西的时候使用很好的扩展功能INSERT ON DUPLICATE KEY UPDATE。参见http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)

如果快速变化的数据在形式(名称/值对)上与配置数据相似,则可以使用类似的模式来存储它。

您可能希望使用内存访问方法来创建一个“当前数据”表。内存表的读写速度非常快,因为数据都在MySQL服务器的内存中。缺点是,MySQL崩溃和重启将给您一个空表,之前的内容将丢失。(MySQL服务器很少会崩溃,但一旦崩溃,就会丢失内存表内容。)

如果需要保存历史记录,可以偶尔运行一个作业(每隔几分钟或几个小时)将内存表的内容复制到磁盘上的表中。

( memcached编辑:您可以考虑在将来将memcached http://memcached.org/添加到您的应用程序系统中,以处理高读取速率,而不是为处理高读取速率的版本1构建数据库设计。这样你就可以看到你的整体应用程序设计中的哪些部分在扩展方面存在问题。我希望过去有人能说服我这样做,而不是为早期版本过度设计。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12031067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档