优化数据库和POST请求性能的提示

时间:2009-04-05 07:15:16

标签: database ajax optimization post performance

我正在开发一个实时涉及多个用户交互的应用程序。它基本上涉及从每个用户到服务器的大量AJAX POST / GET请求 - 这反过来又转换为数据库读取和写入。从服务器返回的实时结果用于更新客户端前端。

我知道优化是一个非常棘手的专业领域,但是你有什么建议让我在这里获得最大的操作速度 - 速度是至关重要的,但是目前这些POST请求中的一些需要20-30秒才能返回。

我考虑过优化它的一种方法是将POST请求分组并将它们作为8-10组发送到服务器,而不是触发单个请求。我目前没有在数据库方面使用缓存,并且实际上并不太了解它是什么,以及在这种情况下它是否有用。

另外,AJAX POST和GET请求在速度方面会产生相同的开销吗?

4 个答案:

答案 0 :(得分:1)

不是连续点击数据库,而是缓存经常使用的数据项(根据数据不经常更改的有效期限)。

您可以通过缓存某些数据客户端来减少与服务器的通信吗?

  

GET的目的就是它的名字   暗示 - 获取信息。它是   打算在你的时候使用   阅读信息显示在   页。浏览器将缓存结果   从GET请求和相同的GET   请求再次提出然后他们会   显示缓存的结果而不是   重新运行整个请求。这是   不是浏览器处理中的缺陷   但是故意设计工作   这样就可以让GET更多了   在使用呼叫时效率很高   他们的预期目的。 GET电话是   检索要在页面中显示的数据   并且预计不会更改数据   通过这样的电话在服务器上等等   应该重新请求相同的数据   期望获得相同的结果。

     

打算使用POST方法   你在哪里更新信息   服务器。预计这样的电话会   对存储在的数据进行更改   服务器和返回的结果   两个相同的POST调用可能很好   完全不同于一个   自初始值以来的另一个   在第二次POST呼叫之前   与初始值不同   在第一次打电话之前因为   第一次通话至少会更新   其中一些价值观。一个POST电话会   因此总能获得回应   从服务器而不是保持   缓存先前回复的副本。

Ref

答案 1 :(得分:0)

您使用的优化技巧通常与普通网站使用的技巧相同,只需更快的周转时间。你可以研究的一些事情是:

  • 预取GET请求,具有由用户加载的高赔率
  • Mitch Wheat建议使用中间的缓存层。根据您的技术平台,您可以查看内存缓存,它很常见,并且有几乎所有内容的库
  • 查看将以非常高的频率查询的非规范化数据。假设读取比写入更常见,如果将工作负载移动到数据访问的写入部分(而不是通过连接添加数据库负载),则应该获得相当大的性能提升。
  • 使用延迟插入优先写入并让数据库服务器优化批处理
  • 确保桌面上有智能索引并找出它们提供的好处。如果由于高写入:读取率而频繁重建索引,则可能需要缩减查询
  • 查看更常规查询中的数据检索,并在数据进入应用程序的业务层时过滤数据。 MySQL(例如)使用与特定查询匹配的非常特定的查询缓存。即使您只是显示x%,也可以为给定集合提取所有结果。
  • 对于写入,如果可以在系统中运行,请查看对数据库运行异步查询。数据同步 不是即时的,它只需要以这种方式出现(大部分时间)
  • 以完全格式化的状态缓存磁盘/内存上的公共页面,以便服务器不必对它们进行大量处理

总而言之,你可以做的事情很多很多(而且它们通常归结为更大规模的一般开发实践)。

答案 2 :(得分:0)

常见的调整技巧是: - 使用更多索引 - 使用较少的索引 - 在文件系统,数据库,应用程序或内容上使用或多或少的缓存 - 在任何组件上提供更多带宽或更多CPU功率或更多内存 - 最大限度地减少任何通信的开销

当然,另一种选择是: 0开发一组测试,最好是自动测试,如果您的应用程序正常工作则可以确定 1测量应用程序的“速度” 2确定它变得多快 3确定性能问题的根源:
典型的问题是:网络吞吐量,文件i / o,延迟,锁定问题,内存不足,cpu 4解决问题
5确保它实际上更快 6确保它仍然正常工作(因此上面的测试)
7回到1

答案 3 :(得分:0)

您是否尝试过分析您的应用?

不确定你正在使用什么框架(如果有的话),但坦率地说,从你的问题来看,我怀疑你是否具备技术技能,只是眼睛注意这一点,并找出事情正在放缓的地方。

直言不讳地说,你不应该用复杂的方法来解决你的问题,因为你并不真正理解问题是什么。通过这样做,你更有可能让它变得更糟。

我建议你做的是每走一步。很可能你会发现

  1. 你有一两个真正长时间运行的位或
  2. 由于n + 1错误或类似问题,您正在运行查询解决方案
  3. 当你发现出了什么问题时,请修复它。如果您不知道如何,请再次发布。 ; - )