gpt4 book ai didi

sql - 用户事件的数据库结构是否正确?

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

像 facebook 那样做用户事件日志的正确方法是什么,而且速度也非常快。我有一个客户网站,其中有事件记录用户的事件并向他/她的 friend /家人/追随者展示,但速度非常慢,我们愿意在数据库中进行更改,如果它有助于提高用户交互性和做日志正确的方式。我敢肯定很多人已经在研究它,但我找不到它的任何链接,它显示了它是如何以正确的方式完成的,所以我也可以实现它。有帮助吗?

期望的事件输出

enter image description here

最佳答案

好吧,Facebook 的架构具有高度可扩展性,他们有很多数据请求的“前门”,以及背后的一些真正的力量来有效地处理数据。

第一个问题是,这个应用程序应该处理多少并发用户? <100,只需确保您的数据层索引良好并且您正在进行“智能”查询(使用索引标准获取显示页面所需的准确数据,不多也不少)。如果查询要返回大量数据,请在查询中将其分块 (SELECT TOP 25 ... FROM Activity WHERE Activity.Date < <date of the last record of the last page you retrieved>) 低数百个,考虑使用复制服务器来分离非实时或不常用的任务,或者只是为了负载平衡。高数百,开始考虑具有分布式表和批量事务传输的服务器集群。不仅如此,您超出了我在企业架构方面的专业知识。

无论如何,您的第一步:

  • 分析您的数据库。查看用户可以执行的每个操作产生的查询,并批判性地查看该查询是否是完成工作的最有效方式。重构基于游标的操作;您不希望在任何预期快速执行的操作中使用这些,因为它们会短路 SQL 引擎可以为您提供处理数字的很多功能。
  • 确定最常用于过滤/检索结果的标准,尤其是相等性标准,并制作这些聚集主键。聚集键将导致服务器将具有相同标准的数据排列在相同的数据页上,以便更快地检索可能以 block 为单位检索的数据。不过要小心;过多的索引会降低性能。
  • 如果查询看起来不错,并且是针对索引良好的架构执行的,但速度仍然很慢,请考虑将查询重构为表值函数或存储过程。这些是预编译的,并且查询计划是预先设计的,可以节省您在公共(public)数据库调用上的开销。他们还需要较少的信息通过网络发送。
  • 在网络服务器端的 session 存储或其他内存存储库中缓存一些更昂贵的查询的结果,尤其是多个页面共享的数据和/或不太可能快速更改的数据。您的网络服务器需要大量可用内存。
  • 还不够吗?将更多硬件投入到数据库服务器计算机中。
  • 考虑分布式模型;大多数主要的 DBMS 都可以在集群环境中工作。您如何构造该模型取决于您的架构和执行的操作;大多数情况下,按地理区域分离数据效果很好,即使对于像 Facebook 这样的巨头也是如此。
  • 在执行所有这些操作的同时,您可以通过合并 AJAX 等异步技术来提高 UI 的响应速度;您的页面框架可以在数据库服务器仍在运行时加载并显示在浏览器中,然后数据可以异步跟进并以延迟方式呈现到页面中。

关于sql - 用户事件的数据库结构是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4880566/

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