- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个类似 SNS 的移动应用程序项目,用户可以在其中上传他们的内容并可以在他们的主页上看到他们订阅的主题或 friend 的更新。
我将用户内容存储在mysql中,通过简单地先查询出用户订阅了谁和什么,然后使用'where userid IN (....) or topic查询过滤掉的内容表来查询用户特定的主页数据IN (....)' 子句。
我怀疑当内容表堆积起来或用户订阅大量用户或主题时,这会变得非常慢。我们新发布的应用程序已经开始每周都有数以千计的新用户,并且随着时间的推移会越来越多。可扩展性现在必须是我们关注的问题。
所以我想知道 Facebook 或 Twitter 是如何处理这个拥有惊人数量用户的订阅问题的。他们是否为每个用户处理一个列表?我试图搜索,但我得到的只是如何与 Facebook 或 Twitter 交互,而不是他们如何实际实现此功能。
我注意到您在使用 Facebook 时只能看到更新而不是历史记录。这意味着订阅新用户不会像使用我当前的方法那样将大量过时的内容转储到您的 Feed 中。
Facebook 如何设计他们的数据库以及他们如何向订阅用户发送新内容?
我的后端目前是PHP+MySQL,如果需要的话,我不介意引入其他后端技术,比如Redis或者JMS之类的。
最佳答案
听起来你们还处于早期阶段。有 N 种方法可以解决这个问题,所有这些都取决于您认为您在短期内会达到 DAU 的哪个阶段、您需要在硬件上花费多少资金、您手中的时间来构建它等等。
您可以尝试使用一个临时表来排队新引入的项目,它的元数据说明它需要什么(哪个主题, friend user_id 列表等)。然后使用像 RabbitMQ/GearMan 这样的队列消费者系统来管理这个不断增长的列表的消费,并找出谁应该处理这个。在 Scala 或 Maven/Tomcat 等 J2EE 系统中构建队列消费者程序,可以持久化。如果你真的想坚持使用 PHP,构建一个 PHP REST API,它可以存在于 php5-fpm 的内存中,并由 FastCGI 进程管理器管理,并通过像 nginx 这样的代理调用,由 curl 调用在适当的时间间隔从 cron 执行脚本。
[编辑] - 最好不要将数据库用于队列系统,使用像 Redis 这样的缓存服务器,它在很多方面都优于数据库,并且可以持久保存到磁盘(查找 RDB 和 AOF)。它不是很容错,万一作业突然失败,您可能会丢失作业记录。您很可能不会关心这些崩溃边缘情况。还要查找 php-resque!
为了让 SNS 高效运行,我假设您已经对表格进行了去规范化。我想象一个“user_topic”表,其中的主题映射到订阅它们的用户。创建另一个表“notification_metadata”,描述用户喜欢在哪里接收通知(SMS/推送/电子邮件/应用内通知),以及推送到这些 channel 所需的元数据(APNS/GCM 的移动客户端批准 key 、电子邮件地址、用户授权 token )。对 notification_metadata 中的两个字段使用 JSON blob,因此每个用户将有一行。这减少了数据库上的 I/O 命中。
使用 user_id 作为“notification_meta”的主键,使用 user_id + topic_id 作为“user_topic”的 PK。不要为任何一个添加自动递增的“id”字段,它在这个用例中毫无用处(占用空间、CPU、索引内存等)。如果两个字段都在 PK 中,则对 user_topic 的查询将全部来自内存,并且在 JOIN 期间唯一的磁盘命中是在“notification_meta”上。
因此,如果一个用户订阅了 2 个主题,则“user_topic”中将有两个条目,并且每个用户在“notification_meta”中始终只有一行
有更多的扩展方式,比如为每个新主题动态创建一个新表,根据 user_id 分片到不同的 MySQL 实例,分区等。有 N 种扩展方式,尤其是在 MySQL 中。祝你好运!
关于mysql - Facebook 或 Twitter 是如何实现他们的订阅系统的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30340381/
用户使用 oauth 登录我的应用程序,注销我的应用程序后,但 twitter 无法执行,问题是用户 twitter 帐户处于事件状态。 当注销我的应用程序的同时注销 Twitter twitter
我在 Twitter 的文本查询字符串参数方面遇到了一些字符编码问题。 a) http://www.twitter.com/share?url=http://www.example.com&text=
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在尝试执行3-legged authorization来在浏览器中调用Twitter API。该过程首先通过将签名的请求发布到 /oauth/request_token 来获得请求 token (
我正在做一个项目来识别用户是否是 Twitter 中的名人。有什么方法可以检查 Twitter 中的用户是否被验证为名人?我知道名人会在推特个人资料中用蓝色徽章来识别。但是我如何通过 Twitter
我想对推文进行一些挖掘。是否有更具体的推文停用词列表,例如删除“lol”和其他推特笑脸? 最佳答案 我想你应该合并普通的停用词列表,例如 this one或that ,带有特定的首字母缩略词词典,例如
我正在为我的期末项目建立一个网站,用于查找和显示 Twitter 上当前 HitTest 门的主题。有谁知道如何从上周或一天内的大量推文中提取主题?我还想知道如何在 http://tweet3d.co
我可以使用获取所有用户的详细信息 https://api.twitter.com/1/account/verify_credentials.json 但我只想通过使用 api 获取 ID 如何获得它。
我见过多个“允许此应用程序与 twitter 一起运行”的内容,但没有一个: 查看您的 Twitter 密码 在“此应用程序将能够”下 示例: 最佳答案 没有 Twitter 永远不会允许人们看到您的
我注意到最近的一些推文有与之相关的媒体,例如来自 TwitPic 或 Flickr 的照片以及来自 Youtube 的视频。你可以直接在 Twitter 网站上看到它们,所以它不仅仅是一个链接。我的想
在 Twitter API 中,有一个 status_lookup 方法可以“水化”推文。文档不清楚这意味着什么。那么我什么时候需要补充推文呢? 如果我有来自 /statuses/user_timel
我使用以下代码来显示一个带有已填充消息的 Twitter 框的页面: Click me 但是,在页面上,我在 Twitter 框中得到了这个: myMessage/ 注意结尾的斜杠。有什么想法可以解决
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
在开发包含 Twitter 客户端的 iOS 应用程序时,我必须允许用户生成主题标签(可以在应用程序内的其他位置创建,而不仅仅是在推文正文中创建)。 我想确保任何此类主题标签对于 Twitter 都有
我是集群新手,之前刚刚实现了一些算法。我需要根据推文的相似性对推文进行聚类。一种方法是仅使用哈希标签,但我认为这不会提供那么多信息。因此应该分析完整的推文。 此外,我还在网上搜索聚类提要的算法。 我遇
我想在 ios 7 中集成 twitter 并希望实现以下功能。1. 从 iOS 应用程序使用 Twitter 登录。2. 获取用户资料信息 我尝试了几个解决方案,但没有一个对我有用。请帮忙。 最佳答
是否有任何方法可以使用用户 ID 或屏幕名称构建个人资料图像 URL?我将用户 ID 存储在数据库中,但我不想存储个人资料图像 url。 编辑: 我也不想进行 api 调用。我想将 user_id 放
在 iOS5 上,是否可以提示用户并将其引导至 Twitter Settings.app 区域,以便他们可以将自己的 Twitter 帐户添加到手机中?如果是,你是怎么做到的? 作为解决方法,我可以指
有许多网站为 Twitter 提供附加服务: hashtags.org tweetmeme.com repeets.com dailyrt.com backtweets.com 他们都有一个共同点:他
我正在使用 Twitter Bootstrap 并尝试使用背景打印页面。 我尝试了网络浏览器中的所有选项,但它不起作用。 如果我不包括 twitter bootstrap,则背景的打印效果很好。 (顺
我是一名优秀的程序员,十分优秀!