gpt4 book ai didi

java - 分析 Oracle 数据库中的大型数据集是在内存中还是迭代查询中进行?

转载 作者:行者123 更新时间:2023-12-02 06:43:22 24 4
gpt4 key购买 nike

全部,

为了简单起见,我创建了以下场景来帮助解决这个问题,这与我遇到的实际问题非常接近。

有一个名为“State”的表,出于所有意图和目的,该表保存与另一个名为“Stock”的表相关的值,该表保存有关对象的数据。

例如

+-----+-------+
|TABLE| VALUE |
+-----+-------+
|Stock| Ball |
+-----+-------+
|State|Instock|
+-----+-------+

所以从上面的例子来看,Stock表中名为“Ball”的记录根据State表是“Instock”。

但是,为了得出这个结论,我需要分析另一个名为 Items 的表,该表是现实世界中存在该库存的物理元素数量的真实值,因此,如果有元素或没有可用元素,这将影响与该 Stock 记录相关的 State 表。

现在要分析这一点并修改状态,我需要从 State 表开始并通过 Stock 表导航到 Items 表,如下所示

State ----> Stock ----> Items

现在这个表中有很多记录,都需要至少每天监控一次。

我以前从未开始过类似的事情,但我的直觉告诉我,我可以获取所有表并将它们作为数据对象加载到我的分析应用程序中,并在内存中虚拟地形成关系。

所以我需要做的只是在开始时进行一个大查询并将所有 SQL 结果加载到内存中。这是可能的还是明智的?

但是我考虑的另一个选项就是像这样迭代每个记录。按顺序进行许多事务。

State record 1 ----> Stock record 1 ----> Analyse Items records --> Update State record 1
State record 2 ----> Stock record 2 ----> Analyse Items records --> Updates State record 2
.......

这两种方法都是不错的选择还是还有其他方法可以做到这一点?

约束

  • Oracle 11g 数据库
  • 无法更改架构或表
  • 考虑使用JavaPerl来进行此分析应用程序
  • 此应用程序将是外部的,并且与数据库不在同一物理位置

伪代码

Get all state records in State table
Find their related records in Stock table
Find all child records of Stock table in Items table
Modify state of current record
Move onto next record set.

因此,我可以用来解决此问题的任何指导或具体方法/功能都将受到欢迎。

请不要给我一个解决方案,我只要求在正确的方向上稍微插入一下:)

最佳答案

我的建议是编写一段 PL/SQL 代码,然后通过计划作业调用它。

调度程序文档: http://docs.oracle.com/cd/B28359_01/server.111/b28310/schedadmin006.htm

确实没有理由使用 Java 或 Perl 来处理这个问题,因为这只是不必要的连接以及 Oracle 环境之外的配置。只需要记住维护一个应用程序即可,而如果它在 Oracle 中,则可以轻松访问和维护(但仍将其置于源代码控制中)。

对于实际的查询,这应该不会太难。您可以根据每个表中有多少行来执行简单的更新语句。类似的东西

UPDATE STATE SET STATE.INSTOCK = TRUE 
WHERE STATE.PK IN (
SELECT ITEMS.STATEFK FROM ITEMS WHERE ITEMS.COUNT > 0
);

然后执行相同的操作,但在 count <= 0 的情况下设置为 false。

对于 PL/SQL 来说,这根本不是正确的语法,但应该能让您大致了解查询应该如何工作。

关于java - 分析 Oracle 数据库中的大型数据集是在内存中还是迭代查询中进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897768/

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