nullcoder
V2EX  ›  数据库

超过 100 列的表,这样的设计存在什么优缺点?

  •  
  •   nullcoder · Sep 18, 2018 · 5751 views
    This topic created in 2973 days ago, the information mentioned may be changed or developed.
    业务背景:
    需要和硬件每分钟通信,写一次记录。
    读取可能是挑其中部分列,列一般不会变,列名会存在另一个表里。
    除了 100 个数据列还有识别的字段和时间戳。

    感觉至少是不方便用 ORM 来做了,不知道还有什么其他的优缺点,读写性能和存储上的考虑之类。
    或者有没有可能的替代方案
    31 replies  •  2018-09-19 17:40:31 +08:00
    sampeng
    sampeng
    Sep 18, 2018
    1
    你这个需要 nosql。。100 列。。。mysql 之类不是不可以。。就是存储各方面都会变得大。哪怕你留空
    kelthuzadzbt
    kelthuzadzbt
    Sep 18, 2018
    2
    可以存 json 字符串吗,日志表存{pid:v} pid 对应列名在另一个表里的主键 id,100 多列的话;
    ps:菜鸟 轻喷
    betulachen
    betulachen
    Sep 18, 2018
    3
    换数据库,rrd
    nullcoder
    nullcoder
    OP
    Sep 18, 2018 via Android
    4
    @kelthuzadzbt 关系型数据库一般不用这种设计
    nullcoder
    nullcoder
    OP
    Sep 18, 2018 via Android
    5
    @betulachen rrd 全称是什么?
    hjc4869
    hjc4869
    Sep 18, 2018
    6
    数据冗余,浪费空间。
    有些情况下性能可能好一些,因为不需要多表查询。不过一般写业务还是尽可能 3NF
    hcymk2
    hcymk2
    Sep 18, 2018
    7
    可以尝试下时序数据库。
    littlewing
    littlewing
    Sep 18, 2018
    8
    nosql 或时序数据库
    nullcoder
    nullcoder
    OP
    Sep 18, 2018 via Android
    9
    @hjc4869 数据冗余在哪里?
    100 列一个时间戳和一个识别字段还好吧
    betulachen
    betulachen
    Sep 18, 2018 via iPhone
    10
    百度 rrd 数据库第一条就是
    wingyiu
    wingyiu
    Sep 18, 2018
    11
    hbase
    reus
    reus
    Sep 18, 2018❤️2
    12
    postgresql + json 列
    关系数据库当然可以这样设计,还能用列内的值创建索引
    yejinmo
    yejinmo
    Sep 18, 2018
    13
    实时数据库了解下?
    ebingtel
    ebingtel
    Sep 18, 2018
    14
    我宁愿用 E-A-V 的方式存储,<id、列名、值>
    fkmc
    fkmc
    Sep 18, 2018❤️1
    15
    时序数据库 influxdb 前东家做法
    hjc4869
    hjc4869
    Sep 18, 2018
    17
    @nullcoder 理解错了, Sorry.
    LadyChunsKite
    LadyChunsKite
    Sep 18, 2018
    18
    @reus 为什么不用 hstore ?
    reus
    reus
    Sep 18, 2018
    19
    @LadyChunsKite jsonb 可以完全替代 hstore
    nullcoder
    nullcoder
    OP
    Sep 18, 2018
    20
    @ebingtel 这样缺了时间戳,如果加上冗余量就大了
    viver
    viver
    Sep 18, 2018❤️1
    21
    postgresql 支持 json,可以考虑下
    nullcoder
    nullcoder
    OP
    Sep 18, 2018
    22
    @reus @viver 看了一下,这种方案还是很方便的。
    这种设计有没有什么可能的缺点呢?
    opengps
    opengps
    Sep 18, 2018
    23
    看具体业务规则,以我做过的 gps 监控为例子,曾经用过关系型数据库:时间列聚集索引达到类似于“时序数据库”的效果。这张表也用途也设计的超级简单(花了很大精力实现“简单”),单行密集写入,按时间区间批量读取。
    gfreezy
    gfreezy
    Sep 18, 2018
    24
    只取少量字段的时候稍微慢一点吧。MySQL 行存储需要遍历更多的数据。
    absente
    absente
    Sep 18, 2018
    25
    列的多少一般不是问题(当然是有上限的)。一个 erlang 程序随随便便几百上千的微线程,一样跑的好好的。不同之处在于,行式关系型数据库,是一个 x 乘以 y 的关系(如果数据充足)。列式数据库就没这个问题,当然,这已经算 nosql 了
    wizardforcel
    wizardforcel
    Sep 18, 2018 via Android
    26
    日志最好存 nosql,因为( 1 )不需要事务,( 2 )不怕丢失
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 18, 2018
    27
    pgsql 搞定
    luozic
    luozic
    Sep 18, 2018 via iPhone
    28
    你这明显是时序数据,又没有多少需要关联的,直接走时序数据库不就搞定了,不过为了后面扩展可以搞 pgsql+json
    nullcoder
    nullcoder
    OP
    Sep 19, 2018
    29
    @wizardforcel 不是日志,是数据记录,后面会用来做分析。
    viver
    viver
    Sep 19, 2018
    30
    @nullcoder pgsql 在数据量比较大的时候(包含 json,并且对 json 进行操作),应该只适合数据的写入和读取,如果对单个 json 的 key 值进行操作,效率都会比较低,决解这个问题可以维护基于 json 串的 GIN 索引。数据量小的话,读写性能和普通的字段应该差距不大,建议是 pgsql 只用来数据的存储,对数据的操作尽量在代码层面上搞定。
    nullcoder
    nullcoder
    OP
    Sep 19, 2018
    31
    @viver 现在看因为原始数据一般是类似与 int 数组,所以可能不考虑 json 这种方案了。
    目前主要业务在关系型数据库里,配置时序数据库需要多数据源的配置处理,还在了解这块。
    现在先简单考虑用反射机制解决 ORM 对象属性过多问题。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1585 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 13:40 · PVG 21:40 · LAX 05:40 · JFK 08:40
    ♥ Do have faith in what you're doing.