crclz
2020-06-19 14:50:32 +08:00
(某张表)所有字段支持排序,而且字段是可增加的
方案 1:
例如,这张表为( id,姓名,班级,电话号码)
那么,我们需要建立下表来进行存储:
( id,key,value )
某列( id=1,姓名=zhangsan,班级=12,电话=18988888888 )可以转换为下表:
( 1,姓名,zhangsan )( 1,班级,12 )( 1,电话号码,18988888888 )
评价:方案 1 开发简单,容易想到。但是将连接好的列拆分会面临以下问题:
1. 无法创建包含多列的索引(当然,如果你只需要单一的按照某个列排序,则不存在这个问题)
2. JOIN 开销大
但是,当数据量、并发量小的时候,1 和 2 都不称之为问题。
方案 2:(这种方法比较 hack )
在业务代码里面用原生 sql 动态增减列,然后用 sql 创建索引,并且把元数据( schema )储存在某处。
方案 3:用 mongodb 。mongodb 是 schemaless 所以不用动态增减列。使用 mongo 命令来建立索引。
方案 4:用 postgres 的 jsonb 类型,和 mongo 功能几乎一致。优点是 pg 自带就有。
对 234 的评价:
虽然没有方案 1 建立索引的问题,但是多列索引的问题依旧存在:
客户打开产品,建立了一个“学号”列和一个“姓名”列。过了几天又建立了“电话号码”列,过了几天又建立了“英语成绩”列。
问题:你如何知道应该给那几列建立多列的索引?
众所周知索引应该按照查询来建立。如果经常按照(英语成绩 数学成绩 语文成绩)来排序,那么就应该为这三列建立索引。所以我的建议是对于数据量大于某个值的表,统计使用者的使用习惯,为最常使用的几种排序组合建立索引。