mysql - BIG 查询 VS 本地查询和搜索 VS 对数据库的多个查询

标签 mysql database performance

给定一个如下所示的数据库:

商品:item_id、external_id、标题、价格、库存、is_active、...
订阅者:subscriber_id、描述、callback_url、callback_parameters、auth_token
订阅:subscriber_id、product_id

以及执行以下操作的脚本:

  1. 获取所有项目的列表
  2. 查询当前商品的价格
  3. 如果商品更新显着(自上次更新以来价格差异很大)
    调用该项目的订阅者的回调。

**我的问题是:** 什么是更好的做法?

选项A:

  • 检索项目列表(~10k)
  • 检索订阅者列表 (~50)
  • 检索订阅列表(~5k)

对于每个重要更新,在内存中搜索订阅者。

优点:网络延迟小(3 个查询)
pro:网络流量相对较小(存在一些冗余)

选项B:

  • 检索项目列表(~10k)

对于每个重大更改:再次查询数据库以查找特定项目的订阅者

优点:最小流量
缺点:网络延迟高(很多查询)

选项C:

  • 查询连接订阅者列表的数据库

优点:低延迟(1 个查询)
缺点:网络流量高,(数据冗余 - 每个订阅者的每个项目都会重复)...
这是因为如果一个项目有 4 个订阅者,它的字段将重复 4 次。

谢谢, 汤姆·W.

最佳答案

有了较少的信息,我会加入订阅项目并在内存中搜索订阅者(A 和 C 的一半),

示例:

SELECT * from subscriptions, items where product_id = item_id

实际上,没有订阅的项目是无法“回调”的。这只会列出项目及其订阅者 ID,当然,如果某个项目被订阅了四次,则列出 4 次。但是,假设所有 50 个订阅者都订阅了所有产品,最终将产生 500K 条记录,这对于数据库来说不是问题。

以编程方式,您可以通过一条记录处理另一条记录,显然不会将所有 500K 加载到内存中。

关于mysql - BIG 查询 VS 本地查询和搜索 VS 对数据库的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521658/

相关文章:

mysql - 长时间运行的脚本会阻止其他事情

mysql - MySQL 中何时使用单引号、双引号和反引号

PHP 用户权限 - 最佳实践?

php - 如何上传数据库(php)?

mysql - 用户创建的数据库结构: non-relational or relational databases?

android - 为什么应用程序的内存使用量在不同设备上差异太大?

mysql - 鞋子网上商店的数据库规范化

c# - 当 valueFactory 有副作用时,ConcurrentDictionary.GetOrAdd

javascript - 使用文档片段真的能提高性能吗?

javascript - 我应该将所有 JavaScript 源代码复制到一个文件中吗?