gpt4 book ai didi

php - 实现事件提要、消息队列或 RDBMS 或 NoSQL 数据库的最佳(可扩展、快速、可靠)方法是什么?

转载 作者:行者123 更新时间:2023-11-29 02:36:11 24 4
gpt4 key购买 nike

我需要为一个与许多流行社交网络平台相似(相同)的系统构建一个事件源(流?更准确地说是“生命流”。)。我最初的尝试是使用 RDBMS,但由于需要大量的 JOIN,所以很快放弃了这个想法。在寻找其他可能的(和更适合的)方法时,我偶然发现了以下帖子:

How do social networking websites compute friend updates?

根据使用消息队列的建议,我花了一些时间研究 RabbitMQ 及其 PubSubHubbub 协议(protocol)。我假设了以下方法:

1) 每个用户都有一个“话题”
2) 其他用户订阅主题
3) 当用户执行某些操作时,将发布一条消息,然后将其关联(解析引用)、格式化(人性化语言、链接等)并聚合(X、Y 和 Z 已对帖子 P 发表评论) PHP 脚本。

但是,我仍然需要遍历每条消息并对其进行处理(除非我的方法完全错误)。那么,将所有内容存储在 RDBMS 中和使用消息队列(除了 PubSubHubbub 协议(protocol)的实现之外)之间有什么区别?

是否有更有效的方法来构建这样的系统? (如果是,请说明)

欢迎提出意见/建议/批评。 :)

提前致谢!

P.S.:有一篇关于 FriendFeed 如何实现它的有趣文章 (http://bret.appspot.com/entry/how-friendfeed-uses-mysql)。但是,我觉得“hackery”将 MySQL 推出了它的舒适领域(这只是关系数据,使用没有关系数据的 RDBMS 有什么意义?)

P.P.S.:我看到的另一个使用消息队列的问题(可能是因为我是这项技术的新手)是,一旦消息被“消费者”获取,它就会从队列中删除,但是,我想要它持续任意时间。

最佳答案

我想给你一些建议:

  • 不要使用 RDBMS,而是使用内存中 (FAST) 数据库,例如 redis .希望你同意我对 redis benchmarks 的看法,redis 相当快。作为另一个旁注,我想指出安装 redis 是儿戏 :)。

    制作

有一个redis-client对于使用 C 的 PHP,这也将非常快。- 如果我理解正确的话,你认为 pubsubhubbub 与消息队列相同,但它们不是:

Parties (servers) speaking the PubSubHubbub protocol can get near-instant notifications (via webhook callbacks) when a topic (feed URL) they're interested in is updated.

与消息队列对比:

In computer science, message queues and mailboxes are software-engineering components used for interprocess communication, or for inter-thread communication within the same process. They use a queue for messaging – the passing of control or of content.

您可能认为它们相同(它们有一些相似之处),但它们并不相同。对于我的消息队列,我会使用 redis(redis 非常强大,因为它也有一个基本的消息队列 :))。您可以使用 rpush 将消息(工作单元)放入队列中.

rpush <name of queue> <message>

然后您可以使用 brpop 从您的工作进程接收来自队列的消息(阻止弹出:))

brpop <name of queue> 0

workers process spawn 将从 cli 开始留在内存中,这样就不会在内存中一次又一次地加载 PHP。

php worker.php

我希望这对你有帮助,如果你有任何问题,我非常愿意回答他们;)

关于php - 实现事件提要、消息队列或 RDBMS 或 NoSQL 数据库的最佳(可扩展、快速、可靠)方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com