数据库存储设计一般分为行存储还有列存储。行存储一般每一行的数据通过主键聚簇索引存储在一起,列存储一般每一列的数据存储在一起。问题中说的任意一列组合查询,针对上亿的数据量,最好采用基于列存储的 OLAP 场景业务的解决方案。但是 MySQL 原生是不支持列存储引擎的,因为 MySQL 的各种接口抽象以及优化器基本都是基于行存储设计的,用列存储思路实现存储引擎会很别扭,一般不会这么做。
大部分业务列存储基本会从 Hbase 或者 Hive 这样的基于 Hadoop 的存储中选择。Hbase 主要面对实时数据查询, Hive 主要面向离线 SQL 分析。
导入数据一般可以通过原生工具拉取 binlog 同步,或者用 sqoop 这样的 ETL 工具进行导入。
还有像 TIDB 这样的本身支持 OLTP + OLAP 业务的存储数据库,省去了用户需要用不同存储面对不同场景的麻烦。TiDB 是一款分布式 HTAP 数据库,它目前有两种存储节点,分别是 TiKV 和 TiFlash。TiKV 采用了行式存储,更适合 TP 类型的业务;而 TiFlash 采用列式存储,擅长 AP 类型的业务。
你这个是即席查询,也就是列随意组合。建议看列存MPP数据库,比如GBase 8a, GP等。
大数据量专注搜索可以考虑Elastic Search(ES)。
3:很多列的数据,任意一列组合查询,mysql能做到,但是上亿的数据量做不到了,查的时候非常慢。我们需要一个引擎来支持它。这个引擎你有了解过吗?