使用kingshard遇到的坑
- 禁止用mysqldump 连接kingshard, 会导致表锁死
- 读取NULL值变为文本
- 通过kingshard连接 select出来的null值变为文本"NULL"
- kingshard 无法join分片表
- 假设a与b都是分片表, 即使a与b分片一致也无法join
- kingshard只能在分片表与不分片表之间join
- 不使用join,改写为嵌套语句 kingshard也不支持
- kingshard分片前先预估数据量和iops
- iops满了 必须分物理机才能解决
- kingshard不支持insert on duplicated key update这样的高级语句 会报语句过于复杂错误 只能支持insert/replace
- 使用replace语句会比insert on duplicated key update的iops高很多
- kingshard不支持过程,使得一些分表操作的过程原子性无法保证,如果需要达到过程原子性,请仔细设计和衡量
- 套表不要使用文本键作为kingshard分片键 会导致大量消耗数据库存储空间
- 如果文本键仅用于一个分片表可以
- 如果文本键用于一组表的分片 会导致一组表都需要存储 并 索引这个分片键 从而大量消耗磁盘空间
- 如果一定要用kingshard在一组表中用文本键分表, 那么必须选择一张表作为核心表 在核心表上存储文本键及其索引
- 在附属表用使用主表的id做为索引分片 但这样会导致核心表和附属表不在一个分片上 无法使用join等复杂语句 不推荐
- 这种情况 推荐使用程序代码按文本键直接计算分片表 这样可以分表键 仅用于程序逻辑 不需要存储在数据库磁盘上
- kingshard 无法在插入时同时声明 分片键与主键 会报过于复杂
- insert into (id, shard_key, value) values('assigned_id', 'shard_key_value', 'custom_value') 这样的语句就是同时声明主键与分片键
- 只要声明主键就会报语句过于复杂, 哪怕主键指定为null
总体:
好处,语言中立,不用对分片硬编码,采用并发模式 分片越多 跨分片查询越有利
坏处,多了很多SQL语言限制,还有奇怪的转义
对于SQL语句 推荐给所有from join的表 在语句中起一个别名, 这样如果表分片调整时 只需要修改指定名称即可
使用kingshard遇到的坑的更多相关文章
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 踩石行动:ViewPager无限轮播的坑
2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...
- 为C# as 类型转换及Assembly.LoadFrom埋坑!
背景: 不久前,我发布了一个调试工具:发布:.NET开发人员必备的可视化调试工具(你值的拥有) 效果是这样的: 之后,有小部分用户反映,工具用不了(没反应或有异常)~~~ 然后,建议小部分用户换个电脑 ...
- 首个threejs项目-前端填坑指南
第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- 关于微软HttpClient使用,避免踩坑
最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...
随机推荐
- 如何将Excel转换成Markdown表格[转]
在这篇文章中,我将告诉你如何快速的将Excel转换为markdown表格,以及如何将Google Docs,Numbers,网页中的表格或其他类似Excel的程序数据转换为Markdown表格 你可能 ...
- git 命令提交项目到github
git 命令提交项目到github步骤如下: 1.使用git 命令客户端进入项目根路径,输入 git init 命令,创建github本地根目录 2.把文件加入到本地项目 git add . ,如 ...
- angular 的navigate 各种使用情况
navigate是Router类的一个方法,主要用来跳转路由. 函数定义: navigate(commands: any[], extras?: NavigationExtras) : Promise ...
- Oracle常用sql命令
1.查看数据库归档是开启还是关闭SQL> archive log list 更改数据库归档模式: SQL> shutdown immediateSQL> startup mountS ...
- c#多线程thread实例详解
1. Thread线程启动 由于ThreadStart是一个委托,所以可以简化写法 static void Main(string[] args) { Console.WriteLine(" ...
- Linux:Debian系统的安装
这期就安装与Ubantu.Linux Mint差不多的系统,但是这个Debian系统的话,它安装时却有些不一样,什么不一样,我们接下来看看吧! 安装Debian系统 系统下载 Debian 9.5下载 ...
- 根据图片URL获取图片的尺寸【Swift语言实现】
import UIKit extension UIImage { /// 获取网络图片尺寸 /// /// - Parameter url: 网络图片链接 /// - Returns: 图片尺寸siz ...
- Qt的子窗口和父窗口阻塞问题
在图形界面中,软件设计者通常需要将活跃窗口限制为一个.在某个窗口活跃时,它的父窗口被它挡住或者挡住一部分,这时候用鼠标去点击父窗口是没有作用的.问题的关键在于将子窗口设置模态: void MainWi ...
- CCF CSP 201803-3 URL映射
转载自 https://blog.csdn.net/tigerisland45/article/details/81697594 /* CCF201803-3 URL映射 */ #include &l ...
- iOS 10 Programming Fundamentals with Swift 学习笔记 0
1,a single statement can be broken into multiple lines ,For example, after an opening parenthesis is ...