1

我想使用全局临时表来存储一些昂贵的中间数据。数据是瞬态的,但在 php 会话期间很好,因此使用全局临时表似乎on commit preserve rows是理想的。

但是.. 看起来全局临时表数据仅对创建它的 oracle 会话可用。

因此,这引发了一个问题,即我如何确保 oci_pconnect 能够返回相同的 oracle 会话,因为我已经读到 oracle 会话对于每个持久连接都是唯一的?我对跨多个 php 执行使用事务不感兴趣,只是临时表。

我正在使用 php 会话,因此可以将其用作选择 oracle 会话的标识符。

到目前为止,这似乎是不可能的,但问一下也无妨。

编辑:实现这一点的预期目的是加速访问我的访问控制中使用的用户组成员信息。
提前解析组成员资格并使用此临时数据代替在所有后续查询中消除了 3 层以上的连接。由于返回的键是RAW,将它们序列化到外部存储会导致HEXTORAW()再次调用 on usage ,并且似乎对预期目的没有帮助。

为确定组级别访问而添加的查询部分在会话期间是静态的,并且自行运行会返回大约 600 行唯一的 16 字节RAW密钥。然后通过链接表将这些键与结果集结合起来,以确定用户是否对结果集具有任何“组级别”权限。

我玩过使用 IN 并将键作为字符串传递,但由于它们是 RAW 键,因此我必须HEXTORAW()每次查询调用 600 次。性能不如使用临时表和执行JOIN.

有没有其他方法可以告诉 Oracle 将查询的那部分结果缓存起来,而不是将它们写入“永久”中间结果?

4

2 回答 2

0

尽管您可能会想出一些技巧来完成这项工作,但至少在某些时候,我认为这几乎肯定会在某些时候引起问题,尤其是在从开发服务器过渡到生产服务器时. 选项可能包括:

  1. 使用永久表,并在逻辑完成后清除数据。
  2. 将数据写入平面文件,然后在需要时将其读回。
  3. 将数据写入平面文件,然后将该文件挂载为外部表。

分享和享受。

于 2012-05-11T17:25:00.153 回答
0

'数据库常驻连接池'怎么样。我想这就是你要找的。试一试!

于 2013-12-25T11:58:08.710 回答