基于时变数据的Oracle空间索引

基于时变数据的Oracle空间索引,oracle,indexing,geospatial,spatial,database-partitioning,Oracle,Indexing,Geospatial,Spatial,Database Partitioning,我正在尝试设计一个关于大地测量数据的数据模型,随着时间的推移,该模型的性能会随着数据的增长而提高。然而,我得到的所有想法都受到了Oracle的一些限制 这些是要求: 要存储的数据是具有纬度和经度的二维点(能够处理任何几何图形将是一个加号) 每月添加新数据。这会从概念上更新点的位置、删除旧点或创建新点。新时间瞬间的新数据成批出现,因此在概念上是有序的,并带有标签。说:t1,t3,t4。(这不是资产跟踪的一种形式,它更多的是一个不断发展的数据快照) 对当前或历史数据的选择必须实时执行(例如,在交互

我正在尝试设计一个关于大地测量数据的数据模型,随着时间的推移,该模型的性能会随着数据的增长而提高。然而,我得到的所有想法都受到了Oracle的一些限制

这些是要求:

  • 要存储的数据是具有纬度和经度的二维点(能够处理任何几何图形将是一个加号)
  • 每月添加新数据。这会从概念上更新点的位置、删除旧点或创建新点。新时间瞬间的新数据成批出现,因此在概念上是有序的,并带有标签。说:
    t1
    t3
    t4
    。(这不是资产跟踪的一种形式,它更多的是一个不断发展的数据快照)
  • 对当前或历史数据的选择必须实时执行(例如,在交互式地图上进行描述)。SELECT语句将查询诸如“返回从t3起属于给定区域的所有点”之类的数据,期望返回初始数据的图像以及在时间
    t1
    t3
  • 事先不知道原始点保持不变的比例是多少。例如,当接收到一批新数据时,100%的点可能会改变,或者只有0%
数据在概念上是
(t,geometry)
的元组,主要问题是不能在
t和geometry上创建空间索引,而只能在
geometry上创建空间索引
总的来说,问题在于,显然不支持为概念上被另一列“切片”的地理数据编制索引

顺便说一句,不管外观如何,将所有数据保存为完整的快照,或将更改保存为增量增量增量并不是整个问题的关键所在,也没有实际意义

下面是我解决这个问题的失败尝试。如果有人对如何有效地建模数据有好的想法,请跳过本文的其余部分(否则,如果有人能详细说明我迄今为止尝试过的选项,我将不胜感激)

第一次尝试失败-多列空间索引 我将在时间
t1、t3、t4
保存完整的数据“快照”,并且数据将由两列标识,即数据切片的几何图形和标识符:


创建表地理编码数据(
几何SDO_几何,
快照标识号(5,0)
);

当然,几何图形需要一个空间索引才能有效地进行操作,显而易见的选择是两列索引。这就是想法失败的地方,因为多列索引不能在空间上进行索引(例如空间索引):


在地理编码的_数据(快照_id,geom)上创建索引我的_索引
INDEXTYPE为mdsys.spatial_索引;
SQL错误:ORA-29851:“无法在多个列上构建域索引”

第二次尝试失败-向几何图形添加另一个标注 另一个选项是将列
snapshot\u id
建模为嵌入
geom
字段中的第三维度。但是,除非有文档记录,否则不能假设生成的索引将在这样的数据结构上正常工作。 毕竟,第三维度只是一个标记,没有几何意义,因此可能会阻碍指数的表现

该选项在概念上类似于在点上使用LSR(线性参考系统)。
事实上,国家:

不要在空间索引中包含度量维度,因为这会导致额外的处理开销,并且不会产生任何好处

第三次尝试失败-间隔分区 第三种方法是根据列
snapshot\u id
对数据进行分区,并创建本地空间索引。在这种情况下,希望分区消除有助于使用空间索引的相关部分,而忽略其他快照中的数据。
该分区将是一个“间隔分区”(一个新的分区将在接收到新的一批数据时自动创建)。但是,当我尝试在间隔分区表上创建空间索引时,我得到的结果是:


SQL错误:ORA-14762:“不允许在间隔分区表上创建域索引”

这是真实的、有意的和有文档记录的:分区通常是可以的,除了空间索引不支持间隔分区。确实明确地说:

基础表上只支持范围分区。分区的空间索引目前不支持所有其他类型的分区

所以,我应该使用范围分区。但是,我宁愿排除此选项,因为它需要进行一些“系统”维护(手动创建新分区,或者作为应用程序逻辑的一部分,这会很麻烦)。
理想情况下,我希望每个快照都有一个新分区,并且希望在引入新快照时自动创建分区

第四次尝试失败-以增量方式表示数据 最后一个选项是CPU最密集的选项,它将保留数据的初始快照,同时以增量的形式保存新批。
然而,事实上,这并不能解决问题核心的根本问题(无法对由另一列内容区分的几何体进行空间索引)

例如,当应用程序必须重建地图的给定部分直到
t2
的内容时,它必须检索与该地图部分相关的所有数据,直到属于
t2
的增量

不幸的是,spatial将获取地图相关部分中的所有三角洲,包括tho