使用memcached减少数据库写入

时间:2012-04-09 17:59:36

标签: mysql memcached

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

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

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

3 个答案:

答案 0 :(得分:1)

(我不是说下面是福音,这只是我的直觉。正如后面所说,我没有你的系统的具体细节:)显然没有冒犯意味着等:))

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

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

现在你说主要的问题是你要达到的mysql连接限制。如果你做了简单的事情(就像我们在评论中谈到的那样:insert delayed),它只是增加限制的情况。您可能应该有足够的能力让您的脚本/用户一次进入数据库并说出#34;最终应该添加#34;然后消失。如果您的用户甚至无法为此打开1个连接,那么您可能会因添加额外的缓存层而无法解决严重的资源问题?

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

答案 1 :(得分:1)

我的统计数据存在类似问题。但请不要使用memcached。您无法确定所有商品是否都会移至数据库。您可以丢失数据和/或双重处理数据。

您应该根据您正在编写/阅读的数据量以及需要的连接数来分析瓶颈。而不是转向可扩展的东西,如Hadoop,Cassandra,Scripe和其他系统。

答案 2 :(得分:0)

  1. 您需要提供有关正在运行的平台的其他信息:O / S,数据库(版本),存储引擎,RAM,CPU(如果可能)?

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

  3. 是否可以禁用要插入的表的索引,因为这会降低插入功能的速度。

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