请教一个关于数据表设计的问题

2017-01-08 12:24:27 +08:00
 patrickstar
本人对数据库本身不懂,想请教一个问题

我使用了一个现成的程序来做控制系统的历史数据归档和检索,这个程序的数据库后端本身支持 cassandra 、 mysql 、 oracle ,我使用的是 mysql ,这两天看了一下子它的数据库表结构,发现它采用了如下的表结构来存储 array 类型数据,即一个 array element 一个 record (比如对于 float array , 1 维 2 维任意大小 array 都可以存储):

CREATE TABLE IF NOT EXISTS att_array_devfloat_ro
(
att_conf_id INT UNSIGNED NOT NULL,
data_time TIMESTAMP(6) DEFAULT 0,
recv_time TIMESTAMP(6) DEFAULT 0,
insert_time TIMESTAMP(6) DEFAULT 0,
idx INT UNSIGNED NOT NULL,
dim_x_r INT UNSIGNED NOT NULL,
dim_y_r INT UNSIGNED NOT NULL DEFAULT 0,
value_r FLOAT DEFAULT NULL,
quality TINYINT(1) DEFAULT NULL,
att_error_desc_id INT UNSIGNED NULL DEFAULT NULL,
) ENGINE=MyISAM COMMENT='Array Float ReadOnly Values Table';

其中 value_r 记录的是 array 的每一个 element 值, dim_x_r 、 dim_y_r 表示 element 的索引,如果有一个 10000 个 element 的 array ,那么就有 1 万条记录

我的软件给这个程序提供数据都是一次提供整个 array 的全部数据,现在我担心它这种存储结构是不是严重制约入库效率啊,请教一下子有没有更好的解决办法,比如把整个 array (任意大小)作为一个对象一次性存档啊
1876 次点击
所在节点    程序员
2 条回复
JamesRuan
2017-01-08 18:41:35 +08:00
你的想法是反模式,原表设计是对的。

你的需求需要 NoSQL ,而不是使用 MySQL 。
patrickstar
2017-01-08 19:32:56 +08:00
@JamesRuan 对于 MySQL 这种表结构在存储大一点的数组是不是在存储和检索时存在比较大的性能问题啊?
看来我得看看 cassandra ,是不是改为 cassandra 会更好一些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/333037

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX