假设我有一个表T1。最初它有ID,Identifier,C1,C2作为列。随着时间的推移,我将添加新的列C3,C4等。是否将列设置为ID,Identifier,Info,其中Info是一个JSON列,其中C1,C2,C3作为键及其对应的值。考虑到大约10^9条记录的规模,读取、写入和更新性能如何?
fcipmucu1#
如果你打算使用关系数据库,那么你应该使用关系模型。虽然许多RDBMS现在可以处理JSON,但这并不意味着您应该将数据保存为JSON(默认情况下)。使用JSON的一个很好的例子是,如果您的源数据是以JSON形式提供的。您可以按原样将其加载到RDBMS中,然后使用SQL将其从staging表JSON中“解包”为适当的关系格式。关于性能,涉及的变量太多,不可能提供有用的答案。获得有用答案的唯一方法是在您的环境中使用数据和与您相关的查询对其进行测试
bzzcjhmw2#
WHERE
ORDER BY
LEFT JOINing
ALTER TABLE .. ADD COLUMN ..
如果你尝试在JSON字段上对10亿行执行Where/Order,你的计算机将融化成一个渣堆。如果你想要更多关于C1/C2/C3的建议,请解释你的应用程序是什么,多久添加一次列,单元格为NULL的可能性有多大(缺失,省略等)。我们可以讨论其他选择。
2条答案
按热度按时间fcipmucu1#
如果你打算使用关系数据库,那么你应该使用关系模型。虽然许多RDBMS现在可以处理JSON,但这并不意味着您应该将数据保存为JSON(默认情况下)。
使用JSON的一个很好的例子是,如果您的源数据是以JSON形式提供的。您可以按原样将其加载到RDBMS中,然后使用SQL将其从staging表JSON中“解包”为适当的关系格式。
关于性能,涉及的变量太多,不可能提供有用的答案。获得有用答案的唯一方法是在您的环境中使用数据和与您相关的查询对其进行测试
bzzcjhmw2#
WHERE
或ORDER BY
子句中包含“columns”,请将它们设置为实际列。LEFT JOINing
得到C3(等等)--这个“解决方案”有优点也有缺点。ALTER TABLE .. ADD COLUMN ..
。但也有警告。如果你尝试在JSON字段上对10亿行执行Where/Order,你的计算机将融化成一个渣堆。
如果你想要更多关于C1/C2/C3的建议,请解释你的应用程序是什么,多久添加一次列,单元格为NULL的可能性有多大(缺失,省略等)。我们可以讨论其他选择。