1. 禁止用mysqldump 连接kingshard, 会导致表锁死
  2. 读取NULL值变为文本
    1. 通过kingshard连接 select出来的null值变为文本"NULL"
  3. kingshard 无法join分片表
    1. 假设a与b都是分片表, 即使a与b分片一致也无法join
    2. kingshard只能在分片表与不分片表之间join
    3. 不使用join,改写为嵌套语句 kingshard也不支持
  4. kingshard分片前先预估数据量和iops
    1. iops满了 必须分物理机才能解决
  5. kingshard不支持insert on duplicated key update这样的高级语句 会报语句过于复杂错误 只能支持insert/replace
    1. 使用replace语句会比insert on duplicated key update的iops高很多
  6. kingshard不支持过程,使得一些分表操作的过程原子性无法保证,如果需要达到过程原子性,请仔细设计和衡量
  7. 套表不要使用文本键作为kingshard分片键 会导致大量消耗数据库存储空间
    1. 如果文本键仅用于一个分片表可以
    2. 如果文本键用于一组表的分片 会导致一组表都需要存储 并 索引这个分片键 从而大量消耗磁盘空间
      1. 如果一定要用kingshard在一组表中用文本键分表, 那么必须选择一张表作为核心表 在核心表上存储文本键及其索引
      2. 在附属表用使用主表的id做为索引分片 但这样会导致核心表和附属表不在一个分片上 无法使用join等复杂语句 不推荐
      3. 这种情况 推荐使用程序代码按文本键直接计算分片表 这样可以分表键 仅用于程序逻辑 不需要存储在数据库磁盘上
  8. kingshard 无法在插入时同时声明 分片键与主键 会报过于复杂
    1. insert into (id, shard_key, value) values('assigned_id', 'shard_key_value', 'custom_value') 这样的语句就是同时声明主键与分片键
    2. 只要声明主键就会报语句过于复杂, 哪怕主键指定为null
      总体:
      好处,语言中立,不用对分片硬编码,采用并发模式 分片越多 跨分片查询越有利
      坏处,多了很多SQL语言限制,还有奇怪的转义
      对于SQL语句 推荐给所有from join的表 在语句中起一个别名, 这样如果表分片调整时 只需要修改指定名称即可

使用kingshard遇到的坑的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  2. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  5. 踩石行动:ViewPager无限轮播的坑

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

  6. 为C# as 类型转换及Assembly.LoadFrom埋坑!

    背景: 不久前,我发布了一个调试工具:发布:.NET开发人员必备的可视化调试工具(你值的拥有) 效果是这样的: 之后,有小部分用户反映,工具用不了(没反应或有异常)~~~ 然后,建议小部分用户换个电脑 ...

  7. 首个threejs项目-前端填坑指南

    第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...

  8. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  9. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

随机推荐

  1. Excel 使用单元格的值 查询MySQL数据库并返回数据给相应的单元格

    Dim MyConn As ObjectPrivate Sub ConnectDB()Set MyConn = CreateObject("ADODB.Connection")   ...

  2. javascript 中的原型继承

    javascript圆形变成的基本规则: 所有数据都是对象: 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它: 对象会记住它的原型: 如果对象无法响应某个请求,它会把这个请求委托给 ...

  3. js 小数取整数

    1.丢弃小数部分,保留整数部分 parseInt() 22.127456取成22.13   parseInt(5/2) 2  向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入 ...

  4. sqlserver查看锁表进程及对锁定的表进行解锁

    select request_session_id spid,object_name(resource_associated_entity_id) tableName from sys.dm_tran ...

  5. 清除cookie

    function clearCookie(){ if(document.cookie.length < 2048){ return; } //cookie大于2kb,清除cookie var c ...

  6. 【EMV L2】终端风险管理(Terminal Risk Management)

    终端风险管理使大额交易联机授权,并确保芯片交易能够周期性地进行联机以防止在脱机环境中也许无法察觉的风险. 虽然发卡行被强制要求在应用交互特征(AIP)中将终端风险管理位设置成1以触发终端风险管理,但终 ...

  7. 在c#中 RemoveAt、 Remove、delete用法区别

    有三种方法可以删除 DataTable 中的 DataRow: Delete 方法和 Remove 方法和 RemoveAt 方法 其区别是: Delete 方法实际上不是从 DataTable 中删 ...

  8. ANOVA-方差分析和单尾方差分析

    https://www.cnblogs.com/webRobot/p/6877283.html https://blog.csdn.net/zijinmu69/article/details/8056 ...

  9. webpack 学习之旅

    首先理解wepack的打包原理:一般单页面应用,你的页面都会引入一个类似bundle.js的文件,在react项目中,你会发现index.html中并没有引入css,那么css哪里去了?答案是它被打包 ...

  10. 异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项。试图加载格式不正确的程序。

    异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项.试图加载格式不正确的程序. 解决方法: 点击 ...