美文网首页
数据分片一些想法和方案

数据分片一些想法和方案

作者: pcgreat | 来源:发表于2019-05-16 09:53 被阅读0次

    要拆用户,用户代理表 ,这让我陷入了一些思考 。不仅仅数据分片 以及查询
    方案1 适用 shardingjdbc ,mycat 这类的 水平拆分 ,根据站点拆分,最终有可能会变成多租户数据隔离的情况
    优点 :1 shardingjdbc 可以有效减少开发人员的路由代码 ,不需要去关心路由表单情况
    2 水平拆分后 业务其实更加清晰了
    3 开发人员能够很快上手 ,技术难度低
    缺点 :
    1 全局的查找 性能还是很差 比如 全局查找limit 10000 5 , 其实是 每个分片的10005条数据 聚合 排序
    2 shardingjdbc 不是完全兼容sql 规范 ,不合规范的需要开发同学改sql
    3 分片后数据增长后 性能还是 变差 ,比如每个站点用户的量超过200w 时 继续分片会近一步加大开发难度

    方案2 这个方案类似我之前公司的解决方案 ,将用户变更数据通过kafka (其他队列也行 性能够好就ok)聚合倒入es ,什么是聚合 ,比如说 用户添加代理了的事件 通过kafka 到了消费者 ,消费者搜索出查询数据 放入 es 中 。近一步 可以 Canal 或者otter 监听binlog 将事件 丢到kafka ,开发人员不需要管事件的投递过程 但是 运维难度会增加 。
    优点 :
    1 多字段 查询 完全难不倒es ,es 本身具有横向扩展能力 ,基本不需要担心数据量的问题
    2 动态查询 简单
    3 无全局 查找 limit 问题
    缺点
    1 需要熟悉kafka和es 技术 对开发人员要求更高
    2 es 性能 也是和 查询语句的性能 , 分片数量 ,索引的配置,实际硬件情况 相关的
    3 对于运维的要求 显然 比shardingjdbc 更高
    4 有一定延时性

    方案3 基于内存数据库 ignite , 内存数据库 本身是 可以持久化的 。不过内存中会有全部数据 (ignite 还有很多其他能力 ,服务网格,内存网格等等 )
    优点 :
    1 相当优秀的 并发读写能力 , 写能力很强 ,具有流式写的能力
    2 集群很容易
    3 还有很多其他诱人的能力

    缺点 :
    1 缺点非常明显 sql 兼容性 比 shardingjdbc 更差 ,适用范围比较小
    2 数据全在内存中 ,你觉得 数据 贵不贵
    3 需要学习 ignite运维

    方案4 数据量进一步扩大 到tb 甚至pb 级别 这种级别查询 只能借助于 离线查询和在线查询的方案来做 , 比如 kafka flink kudu , kafka flink druid
    优点
    1 巨量数据量查询解决方案
    2 olap 需求 可以达到亚秒级别
    缺点
    1 运维 和开发 要求高

    还有 hbase cassandra 列式存储 我就不说了

    相关文章

      网友评论

          本文标题:数据分片一些想法和方案

          本文链接:https://www.haomeiwen.com/subject/wzcbaqtx.html