我们目前使用的是postgresql,现在必须在数据库中保存一些表。表一经创建就不会更新,但可能会被过滤。
这些表格本质上是动态的,因为可能有 n
柱,
所以一张table应该是:
|------|--------|--------|
| NAME | DATA 1 | DATA 2 |
|------|--------|--------|
另一张table是:
|------|--------|--------|--------|--------|--------|
| NAME | DATA 1 | DATA 2 | DATA 3 | DATA 4 | DATA 5 |
|------|--------|--------|--------|--------|--------|
数据没有标准化,因为它在处理 n
一次读取所有行。
这些是我想出的解决办法,
以json类型或hstore对将表另存为json。
将表格另存为文本字段中的csv数据
存储上述数据的替代方法有哪些?nosql数据库能处理这些数据吗?
3条答案
按热度按时间o2g1uqev1#
在您的问题中,我看不到任何东西可以阻止您使用具有相应数据列数的普通表。这是迄今为止最有效的存储方式。最小的存储空间,最快的查询速度。
“创建后从不更新,但可能被过滤”的表很难是“动态的”。除非你隐瞒了重要的细节。
除非有超过100列。请参见:
postgresql select查询中的最大列数是多少
(但您后来最多评论了12条,这完全没有问题。)
jogvjijk2#
从你描述的情况来看,这听起来像是jsonb的工作。假设
name
在某张table上是独一无二的,我可以想象这样的事情:基本上,这个想法是使用tableid来标识每个子表,并在这个db表中存储子表的行。
这带来了一些可能性:
创建一个单独的表来存储关于每个子表的元数据。例如,子表的模式可以存储在这里以进行应用程序层验证。
大/热子表的部分索引:
create index test_1_movie_name on test ((data->>'name')) where tableid = 1
e37o9pze3#
动态列意味着无模式是我们应该寻找的选项。首选mongodb。我们是否存储为json?如果是这样的话,mongo将帮助处理数据/提取/报告将使生活更轻松。
如果您不熟悉nosql。mssql 2016以后的json列存储支持varchar(max)。sqlserver提供了处理json数据的函数。尽管nvarchar默认是基于文本的索引。sql支持基于计算列的索引,这将有助于处理json中的元素。允许任何数量的非聚集索引计算列,这将简化处理json数据的索引。SQL2019对json有更多的支持