【问题标题】:How to improve the search API performance with Oracle providing thousand of rows per call如何使用 Oracle 每次调用提供数千行来提高搜索 API 性能
【发布时间】:2020-10-10 20:28:45
【问题描述】:

我对 Java8 和 Oracle 有一个复杂的问题。我们的 Java8 API 负责从 Oracle DB 每次调用提供 1000 条记录。我们正在使用 JDBC Spring。进入数据库设计,我们有 2 个表。

  1. 商家: 身份证 |姓名 |和其他列 此表的总列数为 11
  2. 商家联系方式: 这是包含 3 种不同联系类型的商家联系信息的表格 所以,我们在这个表中每个商家有 3 行
  3. 商家关系: 此表保留有关 Merchant Id 和父 Merchant Id 的信息

我们的 API 需要提供所有属于请求的父商家 ID 的商家信息。

我们已经加入到 Oracle 存储过程中,并且我们也有索引。 当我们减少从 DB 返回的列数时,此 API 表现良好。 只要列数增加,API 性能就会下降。 要获取 1000 条记录,此 API 平均需要大约 2.5 秒。来自具有 1000 条记录的 DB 的较小信息集是否需要大约 500 毫秒 [良好的性能]

我们还在从 JDBC 到 Oracle 的数据读取操作期间定义了 fetch-size。 Oracle 版本是 12.x,API 是 Java Vertx

请提出建议。

【问题讨论】:

  • 您的数据有多冗余(JOIN 会导致大量冗余)?获取所有 id,然后只获取一次数据可能会更快。
  • 请参阅here 必须发布哪些信息(表结构、数据大小、执行计划)。 好消息是,如果您需要 2 多秒才能获得 1K 行,那么您有有很大的改进空间
  • 我们已经加入 Oracle 存储过程 - 这是否意味着 循环一个游标从循环中的其他表中获取行我>?
  • 这里的加入很简单,第一次加入:有商家关系的商家,第二次加入:有商家联系的商家。我们需要执行的这些最小连接。
  • 是的,我们需要在这里找到改进的范围。所以,我在这里寻找一些带有最佳实践指南的解决方案设计。

标签: java spring oracle performance vert.x


【解决方案1】:

我们如何使用网络搜索引擎?

您真正查看了多少结果页面? 1, 2, ... 10, ... 50, 更多?

大多数用户只查看第一页,大约 2 或 3 页,然后他们尝试优化搜索以获得更集中的结果。

您的用户真的需要 1000 条记录吗?他们真的在看 1000 条记录吗?

https://blogs.oracle.com/oraclemagazine/on-top-n-and-pagination-queries

【讨论】:

  • 是的,因为 UI 有下拉菜单和其他控件来显示所有商家,并且需要预先填充。另外,我们考虑缓存这个响应,但是由于响应大小很大,所以缓存可能不是最好的方式。此外,每次添加/更新商家时,缓存都需要更新。
  • 另外,我们对数据进行了分区,总记录在 10K 左右,每次调用我们只得到 1K,所以每个用户大约 10 次调用,但好的一点是数据对所有用户都是通用的.我们是否应该对 API 设计进行任何更改,如果是,那么为什么以及如何进行。
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
相关资源
最近更新 更多