Mongodb _id
字段定义为:
ObjectId is a 12-byte BSON type, constructed using:
a 4-byte value representing the seconds since the Unix epoch,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.
postgresql中这个字段的最有效表示是什么?
答案 0 :(得分:5)
我已将char(24)
与约束CHECK decode(mongo_id::text, 'hex'::text) > '\x30'::bytea
一起使用。虽然此约束不检查ObjectId的完整性,但它仅允许存储有效格式。这将ObjectId存储为纯文本,这使得值易于读取。
其他选项可以是为列使用bytea
类型,并将数据输入为"\xOBJECT_ID"
,其中\x
将OBJECT_ID的文本形式转换为字节数组。这比char(24)
占用更少的空间(如果你有数百万行可能是相关的),但访问非二进制格式的值需要使用例如。 encode(mongo_id::bytea, 'hex')
(可能很累赘)。
某些平台(如RedShift)可能会遇到bytea
数据类型的问题。
如果您需要轻松访问ObjectId中的元数据,您可以单独解析和存储它(例如,在jsonb
列或每个相关属性的单独列中)。可能是"创建于"部分元数据是唯一有趣的属性。