【问题标题】:memcached with a java and php application带有 java 和 php 应用程序的 memcached
【发布时间】:2010-11-02 00:48:05
【问题描述】:

我有一个应用程序,它通过一个 java 应用程序每 1-2 分钟记录多达 8000 台设备的状态,并将设备 ID、时间和状态存储在数据库中的一个表中。

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

我正在考虑在 java 应用程序中使用 memcached 来存储每个 deviceid 的最新状态,然后让 php 应用程序访问 memcached 来填充显示。以前状态的报告仍然会从数据库中删除,因为它们不经常运行。

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

另外,从不同语言的 API 写入/读取 memcached 是否存在任何互操作性问题?

【问题讨论】:

    标签: java php mysql memcached


    【解决方案1】:

    您可能已经在您的 RDBMS 中内置了一个高效的多语言查询机制! 它不太可能通过内置在数据库系统中的缓存和并发机制来改进。您最好将时间花在调整 SQL 上,以确保在这些机制下发挥最大优势。 (确保 SELECT 中的并发设置允许“脏读”,保持工作单元(BEGIN TRANSACTION 和 COMMIT 之间的处理)尽可能短等等)。

    根据对 INNODB 的评论,以下命令:-

    set transaction isolation level read uncommitted;
    

    将允许您在提交之前读取任何插入的行 并且将完全忽略任何锁定和并发。这将促进 作为 Java 的一半,你的表现不会给你带来任何问题 应用程序仅插入。

    【讨论】:

    • 因为我正在执行的插入是原子的(单行插入)。允许脏读如何提高运行 innoDB 的表的性能?我当时(可能被误导)理解 Innodb 支持单行锁定,因此这些查询应该相互干扰?
    • 对于那些认为 memchached 优于利用数据库 chacheing 的人来说。 DB chaching 的扩展性更好,它适用于比可用内存大几倍的数据集,它可以在多个位置的多个应用程序服务器上工作,并且与标准的灾难恢复/高可用性解决方案配合得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2012-08-27
    • 2012-10-21
    • 2012-12-08
    相关资源
    最近更新 更多