首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL :用于高更新频率的大型集的表组织

MySQL :用于高更新频率的大型集的表组织
EN

Server Fault用户
提问于 2010-03-19 19:45:37
回答 3查看 1.3K关注 0票数 2

在选择我的MySQL模式应用程序时,我面临着一个两难的选择。因此,在我开始之前,这里有一张非常简化的数据库图片:

这里的模式:http://i43.tinypic.com/2wp5lxz.png

在一句话中:对于每个客户,应用程序获取文本数据并将标签附加到所收集的数据上。

作为每个表用法的近似值,下面是我所期望的:

  • 顾客:~5000,不应该增长很快
  • 数据:每名客户500万,大客户可能是两倍或三倍。
  • 标签:~1000,大小相当固定。
  • data_tag :每名客户可以轻松获得数亿美元。每个数据都可以被标记很多。

收获过程是永久性的,这意味着大约每15分钟就会有新的数据出现并被标记,这需要一个非常稳定的索引刷新。

我的许多查询都是在特定日期之间选择数据计数,并在特定客户上使用特定标记进行标记(很少涉及多个客户)。

这里是这样的情况,你可以想象这样的数据量,我在数据组织和索引方面面临挑战。再说一遍,这是我的结构的一个非常简约和简化的版本。我的问题是,这样做更好吗?

  1. 坚持这个模型,管理疯狂的指数优化?(这涉及到data_tag表中可能有数十亿行)
  2. 更改架构,并使用每个客户一个数据表和一个data_tag表?(这涉及到我的数据库中有5000个表)

我所有这些都是在一个MySQL 5.0专用服务器(四核,8 8Go内存)上运行的。我只使用InnoDB,我还有另一个运行狮身人面像的服务器。所以知道这一切,我迫不及待地想听听你对这件事的看法。

谢谢。

编辑

多亏了你的回答,我才意识到这个数字是多么疯狂。下面是表的更新、更真实的用法(基于实际服务器,它只是一个基本的rackspace框)。

  • 客户: 2000 (固定)
  • 数据:每个客户100万(固定的,旧的数据存档)。而且非常不公平:一些客户只有几千人,最大的500万人)
  • 标签: 1000 (固定)
  • data_tag :每个客户大约有300万或500万(也依赖于数据,也是不公平的)。

谢谢。

EN

回答 3

Server Fault用户

发布于 2010-06-10 01:22:51

根据我多年使用MySQL的经验,我的两分钱是,你的后一种选择听起来更符合逻辑和现实。

与当前模式相比,每个客户使用一个数据和一个data_tag具有更简单的总体可管理性。第二个选项的编码也会更简单。

您可以询问更多的MySQL专家;您的第二个选择是最好的。

如果你愿意的话,我可以详细介绍,这是一个简单的答案,一个简单的问题,一个大的问题。它是双向的

票数 2
EN

Server Fault用户

发布于 2010-03-19 20:06:31

在不了解您的应用程序的情况下,除了您在这里放置的应用程序之外,它还有点难说。您的数据模型非常简单,这对您的好处就像您预期的那样,实际上是数十亿行。我将避免创建超过5k的表,因为如果尝试这样做,您可能会遇到文件描述符问题和缓存限制。

当然,您可能可以将它们解压/配置,但这仍然不是最佳配置。

您是否也在为非键数据创建索引?例如,这些名称列?这可能会减慢您的写入性能,以便备份15分钟的批处理作业。

老实说,如果这是我的申请,我会考虑两种可能的解决方案:

  1. 如果性能成为问题,那么就按照您现在的情况,将客户划分为多个MySQL服务器。除非您有这些数据,并且这些客户排队,这还不是一个问题。不要花太多时间为“万一”而设计。坚持使用简单的模式,并将第一组用户介绍给第一台服务器。当您开始使用容量时,请引入第二台服务器并将这些新用户隔离到该数据库中。切分,可以这么说。用资源监控和良好的管理技术来支持它,这样您就可以知道“容量”线何时接近了。
  2. 像卡桑德拉或MongoDB这样的东西会起作用吗?我对你的问题还不太了解,不能提出建议,也不能排除。MongoDB可能是一种选择。值得一看。

所以,我想简单地说,让MySQL做它做得好的事情,运行更多的它们。或者,如果可能的话,看看像蒙戈这样的东西。

票数 1
EN

Server Fault用户

发布于 2010-03-19 20:16:40

嗯,根据我的经验-你确定MySQL甚至是最好的数据库吗?尝试查看Oracle或Server (尽管oracle集群在这里可能有优势)?

如果你认为授权成本会杀死你,让我说你还不知道你需要什么硬件来运行它。一旦你得到SAN的第一份报价,你就需要这样做--你可能会嘲笑相应软件的价格。

只是个主意。

  • 顾客-让我们说10.000,如果你认为它会增长很快。
  • 数据--让我们假设一个普通客户有700万美元。这已经是数据表的70行了。是啊,抱歉,四个零加起来了。
  • 如果每个数据都有10个标记(没有任何指示),我们将讨论data_tag字段的7,000亿行。

变得更疯狂。

  • 如果DataTag没有索引,没有开销(它有),那么数据:标记是每个条目10个字节-- tag_id是2个(65536就够了),遗憾的是,data_id是8个--您不能用4个字节来处理7000亿个条目。这是大约7800 12的原始数据(700.000.000.000 *12/ 1024 / 1024 / 1024)。索引POSSIBlY使其加倍。

为了有效地处理这个问题,这是一个高端SAN。我们这里不谈论"10盘“,我们谈论的是一个高端的SAN,可能有400张以上的光盘来处理所有这些数据--别忘了,到目前为止,我们还没有任何指数。

我所有这些都是在一个MySQL 5.0专用服务器(四核,8 8Go内存)上运行的。

很好的尝试。这到底对什么有好处?很抱歉问你,但是8gb内存不会有帮助(这里没有印象),去一台256 go的机器.这可能需要AMD和其中一个真正昂贵的Opteron 8000。但你需要内存。

无论如何,这将是世界上最大的数据库安装之一(我怀疑您是否正确地表示了事实)。

您肯定需要一些能够处理这个问题的东西--如果您真的需要这样做的话,Oracle集群或Server集群可能会加快速度。这是远远超出免费数据库所能想到的处理方式的。真的。

而且您需要适当的备份过程(这是MySQL缺乏的)。您还可能喜欢Serve 2008数据页压缩,这可能会使磁盘上的数据大小减少50%左右。不仅是为了节省磁盘成本,而且因为它意味着更少的IO -这直接转化为更高的性能(因为您不能在内存中缓存表)。

尽管我不想这么说,但您可能还想考虑在一个不错的大型机上使用IBM -我不是说在它上运行Linux。由于硬件架构的原因,VMS在处理超大规模数据库方面有着极大的优势。不要问价格;)

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

https://serverfault.com/questions/124396

复制
相关文章

相似问题

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