oracle - 分开存储元数据和原始数据

标签 oracle mongodb couchbase database

将文档/*LOB 的元数据(或索引数据)与原始数据分开存储是否有优势。

例如,有一个表/集合/桶,索引为(姓名,学校)

ID: 123
name: Johny
School: Harvard
Transcript: /*2MB text/binary*/

对比

元数据

ID: 123
name: Johny
School: Harvard

数据

ID: 123
Transcripts: /*2MB text/binary*/

让我们假设 mongodb,尽管它可能真的与数据库无关。

db.firstModel.find({},{transcripts:0})
对比
db.secondModel.find()

此外,如果我们对元数据进行聚合/分组,转录本中的重负载是否会压低它(即使聚合在其他字段上)?单独聚合元数据集合,然后通过数据集合中的 id 检索是否更好?还是尊重数据库设计(将所有内容耦合在一个文档中)更好?

最佳答案

在 Couchbase 中,如果它适用于您的用例,一个选项可能是让您的 2MB 文档的对象 ID 类似于 harvard::johny::123。每个对象都会有一个这样的模式,用于在您的应用程序中一致使用的每个对象 ID。因此,您的应用程序可以轻松地将对象 ID 拼凑在一起。这样您就不必查询或使用 View 。你知道它是 harvard and johny and his 123rd object,你可以通过 ID 得到它。您已经知道答案,无需查询,因此 Couchbase 会非常快。

话虽这么说,但您可能还想在该元数据对象中保留其他元数据,并且希望建立索引,然后是的,在 Couchbase 中,最好像您建议的那样分解文档。在 Couchbase 中,将它们放在单独的存储桶中甚至可能更好,这样索引器只会查看它将索引的内容。

举一个可能不完全适用于您的用例的示例,但应该让您了解什么是可能的 go here

综上所述,根据经验,无论数据库如何,我都不喜欢像您建议的那样在数据库中长期保留更大的对象。从运营的角度来看,这很糟糕。您正在将相当于静态数据的数据存储在一个需要非常高性能的层中,通常具有昂贵的存储空间并且必须随着时间的推移备份这些对象。几个月/几年后,它们会成为您脖子上的船 anchor 。我建议将元数据保存在一个快速执行的系统中,如 Couchbase(缓存+复制持久性等),它也有一个指向大型对象的指针,最适合分发大型静态对象,如 HDFS、Amazon S3 等.

关于oracle - 分开存储元数据和原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31200170/

相关文章:

database - 预定义的 ORACLE PL/SQL 异常在哪里?

elasticsearch - 具有Elasticsearch插件的Couchbase(无法在数据库中找到任何文档)

nativescript - 将填充的 couchbase lite 数据库保存为 Nativescript 和 vue 中的备份?

java - 如果 select 语句包含 DATE 类型的列,则聚合 SQL 查询不起作用

sql - 列出Oracle中给定用户的所有表

.net - SSIS 中的 Hyperion Essbase 连接

Couchbase - 如果节点在将数据写入磁盘之后但在复制之前死亡,会发生什么情况

node.js - Mongoose 不会增加数字字段

python - 使用 python 创建正确的 JSON 字符串

javascript - 如何在 MongoDB 中累积结果(使用 forEach?)?