0

我想将我的统计跟踪系统转换为不直接写入数据库,因为我们遇到了瓶颈。

我们目前在站点的某些方面使用 memcached,我想用它来存储统计信息并定期将它们提交到 mysql DB。

然而,问题在于项目的数量(以百万计),这些项目可能会在 cronjob 运行之间收集到将它们提交到数据库中的统计信息。除了运行 aSELECT * FROM data并检查每个 memcache 键是否存在,然后更新表....还有其他方法可以做到这一点吗?

4

3 回答 3

1

(我不是说下面是福音,这只是我的直觉。如后所述,我不知道你的系统的细节:)显然没有冒犯的意思等等:))

我建议不要为此使用 memcached。Memcached 用于快速检索您之前获得的值,而不是存储值。最大的区别是您的缓存已满,您将丢失数据。

通常,您的缓存中没有数据,然后从源中重新收集数据,在这种情况下这是不可能的。仅此一项就是我试图劝阻你的理由。

现在您说主要问题是您遇到的mysql连接限制。如果你做一些简单的事情(就像我们在评论中谈到的那样:the insert delayed),这只是增加限制的一个例子。您可能应该有足够的能力让您的脚本/用户访问数据库一次并说“最终应该添加”,然后离开。如果您的用户甚至无法为此打开 1 个连接,那么您可能无法通过添加额外的缓存层来解决严重的资源问题?

显然很难说没有任何系统、软件和硬件规格,但我的建议是看看你是否可以通过增加限制来让他们打开连接,并稍微调整一下服务器变量,而不是猴子补丁通过使用 memcached 作为中间层来构建您的系统。

于 2012-04-09T18:41:32.337 回答
1

我对统计数据也有类似的问题。但请不要使用 memcached。您不能确定您的所有项目都将移至数据库。您可以丢失数据和/或双重处理数据。

您应该根据正在写入/读取的数据量以及需要多少连接来分析瓶颈。而不是切换到可扩展的东西,如 Hadoop、Cassandra、Scripe 和其他系统。

于 2012-04-10T06:31:17.683 回答
0
  1. 您需要提供有关您正在运行的平台的其他信息:操作系统、数据库(版本)、存储引擎、RAM、CPU(如果可能)?

  2. 您是插入一个表还是多个表?

  3. 您能否禁用要插入的表上的索引,因为这会减慢插入功能。

  4. 您是否在插入原始数据时运行任何触发器或存储过程来计算值?

于 2012-04-10T08:38:13.280 回答