V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
patrickstar
V2EX  ›  程序员

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

  •  
  •   patrickstar · 2017-01-08 12:24:27 +08:00 · 2025 次点击
    这是一个创建于 2874 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人对数据库本身不懂,想请教一个问题

    我使用了一个现成的程序来做控制系统的历史数据归档和检索,这个程序的数据库后端本身支持 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 (任意大小)作为一个对象一次性存档啊
    2 条回复    2017-01-08 19:32:56 +08:00
    JamesRuan
        1
    JamesRuan  
       2017-01-08 18:41:35 +08:00
    你的想法是反模式,原表设计是对的。

    你的需求需要 NoSQL ,而不是使用 MySQL 。
    patrickstar
        2
    patrickstar  
    OP
       2017-01-08 19:32:56 +08:00
    @JamesRuan 对于 MySQL 这种表结构在存储大一点的数组是不是在存储和检索时存在比较大的性能问题啊?
    看来我得看看 cassandra ,是不是改为 cassandra 会更好一些
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:45 · PVG 04:45 · LAX 12:45 · JFK 15:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.