本人对数据库本身不懂,想请教一个问题
我使用了一个现成的程序来做控制系统的历史数据归档和检索,这个程序的数据库后端本身支持 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 (任意大小)作为一个对象一次性存档啊
我使用了一个现成的程序来做控制系统的历史数据归档和检索,这个程序的数据库后端本身支持 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 (任意大小)作为一个对象一次性存档啊
