2010-11-02 30 views
0

的memcached我有一个涉及通过一个Java应用程序记录每1-2mins高达8000台设备的状态,并存储设备ID,时间,并在表中状态数据库的应用程序。用Java和PHP应用

该应用程序的下一个组件是一个PHP界面,显示这些设备的最新状态(分配给用户登录的设备,最多可以有500个并发用户,即每个设备可以查看16个设备,但超过50-100个用户的平均负载)。该应用程序还将打印关于设备一段时间的状态的报告。

我正在考虑使用Java应用程序中存储最近的每个设备ID状态,然后具有PHP应用程序只是访问分布式缓存来填充显示memcached的。之前的状态报告仍然会从数据库中删除,因为它们很少运行。

在决定将memcached写入此应用程序时,我的困惑已经来临,因为memcached的性能显然是通过每次缓存更新的多重命中来实现的。这个应用程序可能会有多个更新(不过直接从应用程序推送,而不是数据库),每个缓存读取。但会在合理大小(2-3GB)的状态表上保存读取。

此外,是否有任何互操作性问题编写/阅读从不同的语言API memcached?

回答

0

您可能已经在RDBMS中内置了一种高效的多语言chaching机制! 它不大可能通过建立在数据库系统中的缓存和协调机制来改善。你的时间将会更好地调整你的SQL,以确保它在这些机制中占据最大的优势。 (确保SELECT中的并发设置允许“脏读”,保持工作单元(BEGIN TRANSACTION和COMMIT之间的处理)尽可能短等等)。

按上INNODB以下命令注释: -

set transaction isolation level read uncommitted; 

将允许您读取任何插入的行beofre他们致力于 和意志完全igonore任何锁定和并发性。这样可以提高 的性能,而不会引起任何问题,因为应用程序仅插入了Java的一半 。

+0

由于我正在执行的插入是原子(单行插入)。如何允许脏读取提升运行innoDB的表的性能?我认为Innodb支持单行锁定(可能是误导),因此这些查询应该干涉彼此? – 2010-11-02 07:53:18

+0

对于那些认为是有魅力的人来说,非常适合于平衡数据库的抄袭。数据库查询更好地适用于比可用内存大几倍的数据集,并且它可以在多个位置的多个应用程序服务器上工作,并且与标准的灾难恢复/高可用性解决方案配合使用。 – 2010-11-03 01:11:41