Oracle:更快的写入速度,同时保持较低的阅读时间

rekjcdws  于 2023-04-20  发布在  Oracle
关注(0)|答案(1)|浏览(150)

我有一个包含5000万行的Oracle表和一个计算数据集的软件。每个数据集有10,000行相同的类别,这样就可以对它们进行索引。单个数据集的每一行都有相同的索引值(例如,让我们称之为“AAA”,“AAB”,“AAC”,...)。我最多有5000个类别。在计算集合后,软件检查,是否设置(“AAB”)已经在数据库中(阅读),然后更新或将数据集写入数据库。我对单行不感兴趣,我只需要筛选某个数据集(index =“AAB”),这是后来下载的。现在每一个集写入数据库,这个过程需要越来越多的时间。如果我运行测试-我得到以下结果:

  • 测试1:删除主键:书写速度快10倍,阅读速度慢1000倍
  • 测试2:索引,但没有主键:阅读速度非常快,但书写速度比测试1慢5倍

Test1的写作时间是完美的,但是阅读是不行的,我该怎么优化这个过程呢,我在想,有没有可能用一个索引或者类似的东西来快速找到组/集的数据,但是不对它们进行排序因为我加载到数据库中的每个集合都已经捆绑了所有关联的行。那么即使我按O(n)我只有5000个不同的类别,这不应该花这么多时间来查找/删除一个类别,对吗?但只是追加集合会非常快。现在我不知道如何做到这一点,这甚至是可能的吗?它有意义吗?有更好的选择来优化过程吗?如何做到这一点(Oracle语法将是有帮助的)?非常感谢!

ttisahbt

ttisahbt1#

基本上有两种配置:

  • 配置1:读得慢,写得快
  • 配置2:读得快,写得慢

一个方便的解决方案是让你的表存储两次。你可以在写得快的地方频繁地写入副本,在读得快的地方阅读。这意味着你必须定期清除读得快的表,并将实际数据复制到其中。
现在,人们可能有两个反对意见:

  • 第一个反对意见是数据将不再是完全实时的。这是事实,但性能是有代价的
  • 第二个缺点是执行同步的速度很慢,可能要花费很多分钟。这也是事实,但是没有什么可以阻止您创建新的缓存表,并在同步过程中使用旧的缓存表进行阅读,然后在同步完成后删除旧的缓存表

相关问题