我是一家小型游戏公司的初级DBA,该公司最近决定将其Oracle服务器从版本11升级到19。
从公司成立的那一天起,10年前,有一个主要的Oracle表负责所有注册用户,它有一个特殊的XMLType列,多年来,任何突然变得必要的标记都被“推”到其中
例如,D.O.B标签、邮政编码等。是随着时间的推移添加的,当然EXTRACTVALUE用于提取请求的标记,这通常会导致速度变慢。
如前所述,该公司最近决定升级到Oracle 19,并且已经开始讨论是否值得将列重新建立为clob,这将把“解析器任务”分配给服务器端而不是DB,并且还将允许插入明显更大的文本部分,例如协议。
如果我们把迁移过程放在一边,假设这个列将继续用于对每个用户来说不重要的值(因此我们不为它们创建列),那么将列重新创建为clob是正确的吗?考虑到Oracle 19提供的新可能性,是否还有其他想法?
1条答案
按热度按时间x33g5p2x1#
虽然我不能提供一个客观的,非固执己见的答案来描述在Oracle中存储半结构化数据的最佳方法,但下面是对您应该经历的过程的快速描述,以确定什么最适合您。
1.对于XML数据,请阅读XML DB开发人员指南中讨论不同存储机制的优缺点的部分。
1.考虑使用JSON。JSON开发人员指南还介绍了不同存储机制的不同优点和缺点。
1.如果你可以在XML和JSON之间选择,你可能应该选择JSON,因为Oracle在这种数据格式上投入了大量资金。有许多新特性是为JSON设计的,而不是为XML设计的。(尽管其中许多新功能仅在版本21和23中可用。
1.如果可能的话,总是向数据库添加约束。无论您多么信任您的应用程序,您几乎都应该让数据库解析数据并验证格式。这在迁移过程中尤其重要,在迁移过程中,您可能会对数据执行独特的转换,并发现一个无效的XML文件会中断许多数据库查询。存储有效的XML不应该限制数据的大小-您仍然可以在数据库中存储大型XML文件。(除非存在其他LOB列问题。例如,如果有奇怪的自定义存储参数,或者如果您使用老式的基本lob而不是新的SecureFile lob。如有必要,请在升级时更改LOB存储类型。)