Oracle 在同一架构中的live和archive表中选择并更新
我正在处理的应用程序目前有一个归档逻辑,其中所有超过6个月的记录都将移动到同一架构中的历史表中,但位于不同的表空间中。这是使用每天执行的存储过程实现的 例如,TABLE_A live,最近6个月==>TABLE_A_H存档,超过6个月,最多8年 到目前为止没有问题。现在,业务部门提出了一个新的要求,即归档数据也应可用于选择和更新。即使是一年前的数据也可能发生更新 可以是直接的,比如 从表A中选择*,其中id='something' 也可以是开放式查询,比如 从创建日期<'XYZ'的表格A中选择* 更新通常针对特定记录 这些查询作为REST服务公开给客户端。存在垃圾/空值的可能性,应用程序无法清理输入 数据库的当前快照为 父表10M记录,每条记录10-15K 子表\u一条28M记录,每条记录少于1K CHILD_TABLE_两条25M记录,每条记录少于1K CHILD_TABLE_三条46M记录,每条记录少于1K 子表\u四条57M记录,每条记录少于1K 内存不是一个限制-如果需要,我可以获得额外的2 TB空间。 问题是,当它访问归档表时,如何保持较低的响应时间?。 在构建一个解决方案时,我应该考虑哪些方面?p> 解决方案1:对于直接选择/更新,请检查记录是否在活动表中可用。如果存在,请在活动表上执行该操作。如果不是,则对存档表执行该操作 对于开放式查询,请使用UNION 解决方案2:使用逐月分区,并将所有8年的数据保存在一组表中?。oracle是否可以在单个表中高效地处理1.5亿多条记录以进行选择/更新 解决方案3:使用NoSQL,比如Couchbase?。由于涉及基础设施/成本,目前不是可行的解决方案 解决方案4: 技术堆栈:Oracle11g,J2EE应用程序,使用JBoss上托管的Spring/HibernateJava1.6Oracle 在同一架构中的live和archive表中选择并更新,oracle,archive,large-data,Oracle,Archive,Large Data,我正在处理的应用程序目前有一个归档逻辑,其中所有超过6个月的记录都将移动到同一架构中的历史表中,但位于不同的表空间中。这是使用每天执行的存储过程实现的 例如,TABLE_A live,最近6个月==>TABLE_A_H存档,超过6个月,最多8年 到目前为止没有问题。现在,业务部门提出了一个新的要求,即归档数据也应可用于选择和更新。即使是一年前的数据也可能发生更新 可以是直接的,比如 从表A中选择*,其中id='something' 也可以是开放式查询,比如 从创建日期 解决方案1:对于直接选择/
非常感谢您的回复 如果我是您,我会选择解决方案2,并确保您拥有可用于预期运行的查询类型的相关索引 按月分区意味着您可以利用分区修剪,假设查询涉及正在分区的列 这还意味着不需要修改现有代码来选择或更新存档数据
不过,您必须设置内务管理以添加新分区,除非您选择间隔分区,但它有自己的一组陷阱。谢谢@Boneist。分区将基于日期列。来自应用程序的大多数查询将不基于日期列。我无法获得有关如何选择分区的足够信息。你能解释一下吗?例如,我根据表中一列的位置代码查询数据库,分区是基于列上创建的。如何解析特定位置代码的表?。它会从最新的分区一直解析到最旧的分区吗?如果location\u code列上没有索引,并且没有任何其他谓词能够进行分区修剪,那么数据库除了进行完整表扫描之外别无选择。您需要研究分区,特别是全局分区索引和局部分区索引,查看您希望对表运行的查询类型,然后确定需要添加的最佳不确定性。谢谢@boneist。我将进一步研究分区索引。看来这就是我的结局。