【问题标题】:PHP mysql choosing engine type for statsPHP mysql为统计选择引擎类型
【发布时间】:2012-01-17 20:06:41
【问题描述】:

我正在尝试为网络系统开发一个接口。基本上,一个软件将所有流量数据通过UDP和其他软件收集,并将数据插入mysql(客户端没有mysql服务器,只有具有用户界面访问权限的服务器才有mysql服务器)。 大约有 50 个客户端,流量非常高,mysql 服务器上的插入操作非常快。但是我想知道性能问题,因为我打算使用推送服务器或其他东西实时打印统计信息,而且这些流量统计信息必须保存很长时间,那么我应该使用什么样的数据库引擎? myisamm,innodb,存档?有人可以向我解释吗?我也愿意接受建议

【问题讨论】:

    标签: php mysql client


    【解决方案1】:

    我认为您需要做的最重要的事情是建立一个环境,您可以在其中进行一些测试和分析不同的方法。

    MyISAM 对于您所说的那种事情来说可能很快就坏了,您只是在表的末尾添加行并针对它运行选择 - 没有删除或更新。

    您需要定期归档较旧的行,我相信归档存储引擎可能非常适合此操作,但我从未有机会使用它,也没有从那里的经验谈起。不过,我怀疑它是否可以用作应用程序的主表。您可以考虑某种分区,例如您按月将结果存储在不同表中的位置。

    High Performance MySQL 这本书应该是你的第一站。

    听起来像一个宏伟的项目 - 祝你好运。

    【讨论】:

    • 我前段时间查过这本书,是的,这确实是一个很好的起点,但正如你在现实世界中所知道的那样,生产环境会变得很脏,而且书籍只是理论上的
    【解决方案2】:

    这里是innodb和myisam的详细介绍

    • myisam 更适合高读取量,innodb 更适合高更新量,因为表与行锁定。

    • innodb 被记录下来,并且可以从 myisam 无法恢复的崩溃中恢复,就像 NTFS 与 FAT 文件系统一样。

    • myisam 有全文索引,innodb 没有。

    • innodb 有事务支持、提交和回滚,myisam 缺少这些。

    因此,如果您并不真正关心更新和恢复表,并且不需要事务支持,您可以使用 MyISAM。要解决大量数据的问题,您可以考虑使用 MySQL 分区,然后使用归档引擎定期将旧条目归档到备份表中。
    如果您真的关心阅读速度,也可以考虑延迟插入。

    更新:
    对于 MyISAM 表,如果数据文件中间没有空闲块,则支持并发 SELECT 和 INSERT 语句。在这些情况下,您很少需要将 INSERT DELAYED 与 MyISAM 一起使用。 insert-delayed

    【讨论】:

    • 如何使用其他数据库服务器,例如超表?你有这方面的经验吗?
    【解决方案3】:

    您应该构建每天更新的统计表,您可以查询所需的统计信息。

    【讨论】:

    • 实际上我正计划为用户界面实现一个推送服务器,以便他们可以看到实时统计信息,所以我认为每天工作的 cron 不能解决我的问题?
    猜你喜欢
    • 2011-06-15
    • 2011-06-06
    • 1970-01-01
    • 2011-08-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2015-07-22
    相关资源
    最近更新 更多