gpt4 book ai didi

mysql - 实现动态更新upvote/downvote

转载 作者:可可西里 更新时间:2023-11-01 06:32:37 25 4
gpt4 key购买 nike

如何实现类似于法定人数的动态更新投票计数:-每当用户投票给查看该页面的每个人时,它都会自动反射(reflect)出答案。

我正在寻找以下地址的答案:

  • 我们是否必须继续轮询每个答案的upvote计数,如果是,
    那么如何管理由于用户太多而产生的服务器负载
    投票表决。
  • 或使用websockits/push通知,这些通知的可扩展性如何?
  • 如何将upvote/downvote计数存储在数据库/内存中以支持此操作。它们如何控制读/写次数。我的后端数据库是mysql

  • 我正在寻找的答案可能并不完全是定额的,但可能是可以使用可用的开源技术来完成的。

    最佳答案

    您不必担心的不是后端系统细节,而是前端。在任何实际规模上,始终保持打开连接是不切实际的。相反,您想要相反的事情-能够尽可能快地服务和关闭来自后端的连接。

    Websockets是一项很性感的技术,但是,在现实世界中,还是有issues with proxies,如果您正在开发可以在各种屏幕(台式机,平板电脑,手机)上使用的东西,它可能会引起您的关注。即使是老式的长期民意调查也可能无法通过防火墙和代理进行工作。

    这是个好消息:我认为

    "keep polling for upvote counts for every answer"



    在这种情况下是一个很好的解决方案。考虑以下:
  • 您的用例不需要任何实际实时更新。稍后再更新计数器几乎没有什么害处
  • 针对非常受欢迎的主题,您想将多个上投票/下票压缩为一个
  • 大多数主题在几天/几周内都看不到上/下投票的流量,因此保持连接开放,等待永远不会发生的事件是浪费
  • 大多数用户永远不会对刚刚读过一个主题的人进行投票/投票,因此您对主题统计信息的读/写比率将大大偏向于阅读
  • 网络延迟在客户端之间差异很大,您会看到100B http响应的可怕传输速率,而这个缓慢的客户端正在逐字节获取您宝贵的服务器连接的响应,更重要的是-后端服务器上的线程是忙

  • 这是我要开始的:
  • 在主页加载
  • 之后,浏览器会定期轮询新主题统计信息
  • 保留您的MySQL,并在其中保留计数器。每次上/下投票都会更新数据库
  • 将Memcached作为直写式高速缓存放在数据库的前面,即,每次有上/下投票更新缓存时,然后更新数据库。将计数器的显式到期时间设置为10-15分钟。每次计数器更新时,过期时间会自动延长。
  • 将这些轮询的HTTP调用设计为可被http代理缓存,将expire和ttl http header 设置为60秒
  • 在您的前端服务器之前放置一个反向代理(Varnishnginx),让该代理对所说的轮询调用进行缓存。这些可以处理二级缓存,并有助于更快释放后端服务器线程,请参阅
  • 上方的网络延迟问题
  • 设置您的反向代理组件,以便与memcached服务器直接对话,而无需调用后端服务器;如果可以同时使用Varnish和nginx,则可以。
  • 没有用于存储此类数据的理想模式,这是在memcached中的一个简单的inc()/dec()操作,请注意,从竞争条件的角度来看这是安全的。这也是MySQL中的安全原子操作UPDATE table SET field = field + 1 WHERE [...]

  • 积极的多级缓存涵盖了您的 read路径:在Memcached和沿途的所有http缓存中,请注意,这些http轮询请求也将缓存在 edges上。

    要处理不受欢迎的主题的长尾部,请使此类响应的http ttl与受欢迎程度成反比。

    当http缓存过期且memcached也不具有读取请求时,它很少会到达前端服务器。如果仍然存在问题,请添加memecached服务器,并全面增加memcached的过期时间。

    完成之后,您就可以处理所有的 reads。您可能仍然会遇到的唯一问题(取决于规模)是 writes的比率很高,即上下投票的流程。这是您的单个MySQL实例可能开始出现滞后的地方。不用担心-沿旧的分片路径进行操作,或添加仅用于计数器的NoSQL存储。

    除非绝对必要,否则不要使用任何消息系统,或者您想找个借口使用它。

    关于mysql - 实现动态更新upvote/downvote,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21599613/

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