开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(一)之语法解析

![](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. Lexer 词法解析器](#) - [3. Token 词法标记](#) - [3.1 DefaultKeyword 词法关键词](#) - [3.2 Literals 词法字面量标记](#) - [3.2.1 Literals.IDENTIFIER 词法关键词](#) - [3.2.2 Literals.VARIABLE 变量](#) - [3.2.3 Literals.CHARS 字符串](#) - [3.2.4 Literals.HEX 十六进制](#) - [3.2.5 Literals.INT 整数](#) - [3.2.6 Literals.FLOAT 浮点数](#) - [3.3 Symbol 词法符号标记](#) - [3.4 Assist 词法辅助标记](#) - [4. 彩蛋](#) ------- # 1. 概述 **SQL 解析引擎**,数据库中间件必备的功能和流程。Sharding-JDBC 在 `1.5.0.M1` 正式发布时,将 SQL 解析引擎从 Druid 替换成了自研的。**新引...
芋艿V 发布于 1天前 阅读 310 评论 2 点赞 2

数据库中间件 MyCAT 源码分析 —— SQL ON MongoDB

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. 查询操作](#) - [4. 插入操作](#) - [5. 彩蛋](#) ------- # 1. 概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 1. 总体流程,让你有个整体的认识 2. 查询操作 3. 插入操作 4. 彩蛋,😈彩蛋,🙂彩蛋 建议你看过这两篇文章(_非必须_): 1. [《MyCAT 源码分析 —— 【单库单表】插入》](http://www.yunai.me/MyCAT/single-db-single-table-insert/?self) 2. [《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?self) # 2....
芋艿V 发布于 5天前 阅读 1344 评论 18 点赞 1

深入了解 gRPC:协议

RC3 版本对于 TiKV 来说最重要的功能就是支持了 gRPC,也就意味着后面大家可以非常方便的使用自己喜欢的语音对接 TiKV 了。 gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的,这里先简单介绍一下 HTTP/2 相关的知识,然后在介绍下 gRPC 是如何基于 HTTP/2 构建的。 ## HTTP/1.x HTTP 协议可以算是现阶段 Web 上面最通用的协议了,在之前很长一段时间,很多应用都是基于 HTTP/1.x 协议,HTTP/1.x 协议是一个文本协议,可读性非常好,但其实并不高效,笔者主要碰到过几个问题: ### Parser 如果要解析一个完整的 HTTP 请求,首先我们需要能正确的读出 HTTP header。HTTP header 各个 fields 使用 `\r\n` 分隔,然后跟 body 之间使用 `\r\n\r\n` 分隔。解析完 header 之后,我们才能从 header 里面的 `content-length` 拿到 body 的 size,从而读取 body。 这套流程其实并不高效,因为我们需要读取多次,才能将一个完整的 HTTP 请求给解析出来,虽然在代码实现上面,有很多优化方式,譬如: + 一次将一大块数据读取到 buffer 里面避免多次 IO read + 读取的时候直接匹配 `\r\n` 的方式流式解析 但上面的方式对于高性能服务来说,终归还是会有开销。其实最...
TiDB 发布于 6天前 阅读 743 评论 4

数据库中间件 MyCAT源码分析 —— PreparedStatement 重新入门

相信很多同学在学习 JDBC 时,都碰到 PreparedStatement 和 Statement。究竟该使用哪个呢?最终很可能是【懵里懵懂】的看了各种总结,使用 PreparedStatement。那么本文,通过 MyCAT 对 PreparedStatement 的实现对大家能够重新理解下。 本文主要分成两部分: 1. JDBC Client 如何实现 PreparedStatement。 2. MyCAT Server 如何处理 PreparedStatement。
芋艿V 发布于 1周前 阅读 708

十分钟成为 Contributor 系列 | 重构内建函数进度报告

--- title: 十分钟成为 Contributor 系列 | 重构内建函数进度报告 author: 徐怀宇 date: 2017-07-14 summary: 为了方便社区同学更好地参与 TiDB 项目,本文一方面对继上一篇文章发布后参考社区的反馈对表达式计算框架所做的修改进行详细介绍,另一方面对尚未重写的 built-in 函数进行陈列。 tags: TiDB Contributor --- 6 月 22 日,TiDB 发布了一篇如何十分钟成为 TiDB Contributor 系列的[第二篇文章](https://pingcap.com/blog-reconstruct-built-in-function-zh),向大家介绍如何为 TiDB 重构 built-in 函数。 截止到目前,得到了来自社区的积极支持与热情反馈,TiDB 参考社区 contributors 的建议,对计算框架进行了部分修改以降低社区同学参与的难度。 本文完成以下**2 项工作**,希望帮助社区更好的参与进 TiDB 的项目中来: 1. 对尚未重写的 built-in 函数进行陈列 2. 对继上篇文章后,计算框架所进行的修改,进行详细介绍 ### 一. 尚未重写的 built-in 函数陈列如下: 共计 165 个 在 expression 目录下运行 `grep -rn "^\tbaseBuiltinFunc$" -B 1 * | grep "Sig struct {" | awk -F "Sig" '{print $1}' | awk -F "builtin" '{print $3}' > ~/Desktop/func.txt` 命...
TiDB 发布于 1周前 阅读 86

MySql-两阶段加锁协议

#MySql-两阶段加锁协议 ##前言 此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: ``` 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。 ``` ``` 2PC,两阶段提交协议:主要用于分布式事务。 ``` MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。 ##什么时候会加锁 在对记录更新操作或者(select for update、lock in share model)时,会对记录加锁(有共享锁、排它锁、意向锁、gap锁、nextkey锁等等),本文为了简单考虑,不考虑锁的种类。 ##什么是两阶段加锁 在一个事务里面,分为加锁(lock)阶段和解锁(unlock)阶段,也即所有的lock操作都在unlock操作之前,如下图所示: ![输入图片说明](https://static.oschina.net/uploads/img/201707/17105307_MZJc.png "在这里输入图片标题") ##为什么需要两阶段加锁 引入2PL是为了保证事务的隔离性,即多个事务在并发的情况下等同于串行的执行。 在数学上证明了如下的封锁定理: ``` 如果事务是良构的且是两阶段的,那么任何一个合法的调度都是隔离的。 ``` 具体的数学推到过程可以参照<<事务处理:概念与技术>>这本书的7.5.8.2节....
无毁的湖光-Al 发布于 1周前 阅读 682 评论 20 点赞 8

数据库中间件 MyCAT源码分析 —— 跨库两表Join

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. ShareJoin](#) - [3.1 JoinParser](#) - [3.2 ShareJoin.processSQL(...)](#) - [3.3 BatchSQLJob](#) - [3.4 ShareDBJoinHandler](#) - [3.5 ShareRowOutPutDataHandler](#) - [4. 彩蛋](#) ------- # 1. 概述 MyCAT 支持跨库表 Join,目前版本仅支持跨库**两**表 Join。虽然如此,已经能够满足我们大部分的业务场景。况且,Join 过多的表可能带来的性能问题也是很麻烦的。 本文主要分享: 1. 整体流程、调用顺序图 2. 核心代码的分析 前置阅读:[《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?yunai)。 OK,Let's Go。 # 2. 主流程 当执行...
芋艿V 发布于 2周前 阅读 1284 评论 1 点赞 2

【复制系列】基于binlog文件和位置的 传统复制

在MySQL中,利用复制,添加从库,通过从库提升读的能力和解决主库的故障,可以从从库提升出来一个新的主库,以达到高可用的目的。本文主要写了 传统复制的搭建 和 解读show slave status中的主要字段 两个方面。
star_glm 发布于 2周前 阅读 127

如何理解并正确使用MySql索引

1、概述 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧。 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 2、索引的优点 1、大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2、帮助服务器避免排序和临时表 3、可以将随机I/O变为顺序I/O 3、索引的创建 3.1、主键索引 ALTER TABLE 'table_name' ADD PRIMARY KEY 'index_name' ('column'); 3.2、唯一索引 ALTER TABLE 'table_name' ADD UNIQUE 'index_name' ('column'); 3.3、普通索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column'); 3.4、全文索引 ALTER TABLE 'table_name' ADD FULLTEXT 'index_name' ('column'); 3.5、组合索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column1', 'column2', ...); 4、B+Tree的索引规则 创建一个测试的用户表 DROP TABLE IF EXISTS user_test; CREATE TABLE user_test( id int AUTO_INCREMENT PRIMARY KEY, user_name varchar(30) NOT NULL, sex bit(1) NOT NULL DEFAULT b'1', city varc...
FEINIK 发布于 2周前 阅读 5229 评论 23 点赞 27 打赏 2

MySQL基于gtid特性与xtrabackup的数据恢复

通过备份文件新建从库,将binlog跑到指定的gtid位置,可以将数据恢复到指定的时间点。
o翡翠谷o 发布于 3周前 阅读 1643 评论 2 点赞 2

TiDB Best Practice

--- 本文档用于总结在使用 TiDB 时候的一些最佳实践,主要涉及 SQL 使用、OLAP/OLTP 优化技巧,特别是一些 TiDB 专有的优化开关。 建议先阅读讲解 TiDB 原理的三篇文章([讲存储](https://pingcap.com/blog-tidb-internal-1-zh),[说计算](https://pingcap.com/blog-tidb-internal-2-zh),[谈调度](https://pingcap.com/blog-tidb-internal-3-zh)),再来看这篇文章。 ## 前言 数据库是一个通用的基础组件,在开发过程中会考虑到多种目标场景,在具体的业务场景中,需要根据业务的实际情况对数据的参数或者使用方式进行调整。 TiDB 是一个兼容 MySQL 协议和语法的分布式数据库,但是由于其内部实现,特别是支持分布式存储以及分布式事务,使得一些使用方法和 MySQL 有所区别。 ## 基本概念 TiDB 的最佳实践与其实现原理密切相关,建议读者先了解一些基本的实现机制,包括 Raft、分布式事务、数据分片、负载均衡、SQL 到 KV 的映射方案、二级索引的实现方法、分布式执行引擎。下面会做一点简单的介绍,更详细的信息可以参考 PingCAP 公众号以及知乎专栏的一些文章。 ### Raft Raft 是一种一致性协议,能提供强一致的数据复制保证,TiDB 最底层用 Raft 来同步数据。每次写入都要...
TiDB 发布于 3周前 阅读 35

对MySQL交换分区的实践

前言 在介绍交换分区之前,我们先了解一下 mysql 分区。 数据库的分区有两种:水平分区和垂直分区。而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区。水平分区即:以行为单位对表进行分区。比如:按照时间分区,每一年一个分区等。 在MySQL中,分区是可以交换的,可以将一个分区表中的一个分区和一个普通表中的数据互换。   交换分区的实现 1、交换分区的语法 alter table pt exchange partition p with table nt; 解释: 将 分区表pt 的 分区p 和 一个普通表nt 中的数据 进行互换。 交换的前提条件: 普通表nt 不为临时表,且不是分区表。 表结构和分区表pt的结构一致。 普通表nt 没有外键引用。 普用表nt 若为非空。在MySQL5.6以及之前的版本,必须在分区的范围内;在MySQL5.7之后则可以不再其分区范围内,也依然会成功存入该分区中。 2、实验 交换分区 (1) 创建一个分区表,并插入数据 # 创建一个 分区表e CREATE TABLE e ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30) ) PARTITION BY RANGE (id) ( PARTITION p0 VALUES LESS THAN (50), PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LES...
star_glm 发布于 3周前 阅读 1848 评论 4 点赞 4

【巨杉答疑】巨杉数据库和mongodb有什么关系吗?

                  哈罗,艾瑞巴蒂~巨杉答疑栏目今日上线啦! 巨杉数据库作为商业化开源软件,已经拥有大量社区用户。开源至今,大到分布式数据库原理、架构问题,小到SDB巨杉数据库的安装使用问题,大家似乎都有很多问题想要和我们交流,所以我们邀请技术大咖和大家好好聊聊,有啥问题尽管放马过来! 昨天,我们就请到巨杉数据库的两位技术大咖在巨杉官方微信群针对分布式数据库的相关内容对于群友的提问进行解答。来淘点干货吧!   1.官方数据说巨杉很多性能超过mongoDB,前者是否可以替代后者,不能完全替代的话,在哪些性能方面巨杉能力不足于mongoDB,为什么,有设计方面的因素吗?mongodb和SDB有什么关系? SDB完全可以替代mongodb,而且很多功能mongodb并不支持。例如事务、join查询等。   目前在性能上超越mongodb,而且在分布机制上也比mongodb完善。   要说弱点,主要在社区的推广和发展上,mongodb最早的出发点是从开发开始的。   e-r关系结构对于开发来说迭代太慢了,所以JSON文档型和对象一一对应,而且没有schema的限定,对于开发POC等迭代帮助太大了,很多互联网企业都是半天出个版本,这对开发要求很高。   Mongodb在易用性上做的很...
巨杉数据库 发布于 3周前 阅读 346

oracle中,通过触发器,记录每个语句影响总行数

触发器, 包,关联数组
noonoo 发布于 4周前 阅读 317 评论 3

使用 Ansible 安装部署 TiDB

作为一个分布式系统,在多个节点分别配置安装服务会相当繁琐。Ansible 是基于 Python 的自动化运维工具,糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能,而且使用简单,仅需在管理工作站上安装 Ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端。选用自动化工具 Ansible 来批量的安装、配置、部署 TiDB 。本文介绍如何通过 Ansible 工具来批量安装,使整个过程简单化。
TiDB 发布于 1个月前 阅读 364 评论 1 点赞 1

三篇文章了解 TiDB 技术内幕 —— 谈调度

任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外。 前两篇文章介绍了 TiKV、TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都是大家看得见的东西。在这两个组件的后面,还有一个叫做 PD(Placement Driver)的组件,虽然不直接和业务接触,但是这个组件是整个集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度。 本篇文章介绍一下这个神秘的模块。这部分比较复杂,很多东西大家平时不会想到,也很少在其他文章中见到类似的东西的描述。我们还是按照前两篇的思路,先讲我们需要什么样的功能,再讲我们如何实现,大家带着需求去看实现,会更容易的理解我们做这些设计时背后的考量。 # 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 KV 存储引擎,数据以 Region 为单位进行复制和管理,每个 Region 会有多个 Replica(副本),这些 Replica 会分布在不同的 TiKV 节点上,其中 Leader 负责读/写,Follower 负责同步 Leader 发来的 raft log。了解了这些信息后,请思考下面这些问题: * 如何保证同一个 Region 的多个 Replica 分布在不同的节点上?更进一...
TiDB 发布于 2个月前 阅读 1016 评论 3 点赞 1

Redis 字符串

Redis 字符串相关应用详解
拿客-三产 发布于 2个月前 阅读 499

演讲实录|唐刘:Rust in TiKV

本文整理自 4 月 16 日 Rust 专场 Meetup 上,我司首席架构师唐刘同学的现场分享,共享给大家。enjoy 😊
TiDB 发布于 2个月前 阅读 42

7个原因告诉你为什么要选择ArangoDB “多模型” 数据库?

ArangoDB 是一个开源的分布式原生多模型数据库 (Apache 2 license)。 其理念是: 利用一个引擎,一个 query 语法,一项数据库技术,以及多个数据 模型,来最大力度满足项目的灵活性,简化技术堆栈,简化数据库运维,降低运营成本。 Github: https://github.com/arangodb/arangodb 合并 多模型数据库能够适用于许多不同的用例。因此它能够最小化后台部件。这样有助于降低总拥有成本,增加灵活性,并整合您的整体技术堆栈需求。 简化性能扩展 应用程序都是一步步逐渐成熟。使用ArangoDB可以使架构中的不同组件便可以进行独立扩展。ArangoDB支持垂直和水平扩展来满足您不断增加的需求。如果您对性能的需求降低,您也可以优化后台系统,这样还可以节省硬件消耗和运营成本。 降低操作复杂度 Polyglot Persistence 的目的是为项目选择最适合的工具。只安装单一模型的数据库软件会让您在运行过程中遇到很多挑战。集成这些解决方案本身就是一项复杂的任务,但是创建一个具有不同数据库之间一致数据的大型内聚系统,并且包含容错机制是无法实现的。在数据方面,Polyglot Persistence 更多的是为某一项工作配置其所需的合理的数据模型。原生多模型数据库支持多种数据(合理的数据与数据...
GermanWifi 发布于 2个月前 阅读 129

数据库中间件 MyCAT源码分析:【单库单表】查询

![](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 接收请求,解析 SQL](#) - [3. 获得路由结果](#) - [4. 获得 MySQL 连接,执行 SQL](#) - [5. 响应执行 SQL 结果](#) - [6. 其他 :更新 / 删除](#) # 1. 概述 > 内容形态以 顺序图 + 核心代码 为主。 > 如果有地方表述不错误或者不清晰,欢迎留言。 > 对于内容形态,非常纠结,如果有建议,特别特别特别欢迎您提出。 > 微信号:wangwenbin-server。 本文讲解 【单库单表】查询 所涉及到的代码。 😂内容和 [《MyCAT 源码分析 —— 【单库单表】插入》](http://www.yunai.me/Mycat/single-db-single-table-insert/) 超级相似,一方面本身流程基本相同,另外一方面文章结构没拆分好。我们使用 🚀 标记差异...
芋艿V 发布于 2个月前 阅读 402

SQL慢查询在Greenplum/Deepgreen中的定位方法

# SQL慢查询在Greenplum/Deepgreen中的定位方法 在生产过程中,有的SQL查询往往会变得越来越慢,这时候,我们该怎么办呢?首当其冲的,我们可以通过查询计划来定位问题,今天就来谈谈如何在查询计划中定位这些慢查询产生的原因。 ## 1.查询计划中是否有操作耗时特别的长? 当我们分析查询计划时,是否有一个异常操作消耗了大部分的查询时间?比如,在执行索引扫描时,时间比预期的要长很多,这时候我们基本可以判断此索引可能已经超期了,需要重建。 ## 2.查询计划预估的时间和真实的时间接近吗? 我们通过运行**EXPLAIN ANALYZE**,查看执行计划预估的返回行数与实际返回的行数是否接近,如果出入很大,说明统计信息是有问题的,我们需要对相关表/列收集更多的统计信息。 ## 3.选择语句中的限定条件是否生效更早? 在执行计划中,选择性限定条件应该更早的应用,目的是让更少的数据返回到上层操作中。如果查询在选择性限定条件应用后表现并不好,返回的消耗依然很大,我们可以收集相关列的统计信息再看看是否会提高性能;另外,还可以通过调整SQL语句中不合理的**WHERE**条件来提高性能。 ## 4.查询计划是否选择了最佳的JOIN顺序? 当我们的查询里面有很多连接操作(JOIN)...
ChrisYuan 发布于 2小时前 阅读 1

MySQL 死锁与日志二三事

最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现。甚至有些异常还比较诡异,最后 root cause 分析颇费周折。那实际业务当中咱们如何能快速的定位线上 MySQL 问题,修复异常呢?下文我会根据两个实际 case,分享下相关的经验与方法。 1、Case1:部分数据更新失败 某天渠道同学反馈某报表极个别渠道数据为 0,大部分渠道数据正常。这个数据是由一个统计程序每天凌晨例行更新的,按理来说,要么全部正常,要么全部失败,那会是什么原因导致极个别数据异常呢? 首先我们能想到的自然是根据统计任务日志来看了,但是看了统计程序打印的日志没有发现诸如 SQL update 失败的异常描述,那当时的数据库究竟发生了什么呢?在查看 MySQL-server 日志之前,习惯性的看了下数据库状态: SHOW ENGINE INNODB STATUS\G 恰好看到了凌晨这个 update 发生了死锁: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2017-07-17 04:09:01 0x7f6de03c8700 *** (1) TRANSACTION: TRANSACTION 215208479, ACTIVE 0 sec fetching rows mysql tables in use 3, locked 3 LOCK WAIT 5 lock stru...
xrzs 发布于 23小时前 阅读 909

数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(一)之语法解析

![](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. Lexer 词法解析器](#) - [3. Token 词法标记](#) - [3.1 DefaultKeyword 词法关键词](#) - [3.2 Literals 词法字面量标记](#) - [3.2.1 Literals.IDENTIFIER 词法关键词](#) - [3.2.2 Literals.VARIABLE 变量](#) - [3.2.3 Literals.CHARS 字符串](#) - [3.2.4 Literals.HEX 十六进制](#) - [3.2.5 Literals.INT 整数](#) - [3.2.6 Literals.FLOAT 浮点数](#) - [3.3 Symbol 词法符号标记](#) - [3.4 Assist 词法辅助标记](#) - [4. 彩蛋](#) ------- # 1. 概述 **SQL 解析引擎**,数据库中间件必备的功能和流程。Sharding-JDBC 在 `1.5.0.M1` 正式发布时,将 SQL 解析引擎从 Druid 替换成了自研的。**新引...
芋艿V 发布于 1天前 阅读 310 评论 2 点赞 2

【福利】蓝色巨人的云计算PaaS平台IBM Bluemix免费试用!

IBM Bluemix,包含认知、物联网、大数据分析、安全、DevOps、应用、应用整合、移动、计算、网络、存储等 11 大类共 140 多个服务的云计算平台。
IBM Bluemix

如何理解并正确使用MySql索引

1、概述 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧。 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 2、索引的优点 1、大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2、帮助服务器避免排序和临时表 3、可以将随机I/O变为顺序I/O 3、索引的创建 3.1、主键索引 ALTER TABLE 'table_name' ADD PRIMARY KEY 'index_name' ('column'); 3.2、唯一索引 ALTER TABLE 'table_name' ADD UNIQUE 'index_name' ('column'); 3.3、普通索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column'); 3.4、全文索引 ALTER TABLE 'table_name' ADD FULLTEXT 'index_name' ('column'); 3.5、组合索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column1', 'column2', ...); 4、B+Tree的索引规则 创建一个测试的用户表 DROP TABLE IF EXISTS user_test; CREATE TABLE user_test( id int AUTO_INCREMENT PRIMARY KEY, user_name varchar(30) NOT NULL, sex bit(1) NOT NULL DEFAULT b'1', city varc...
FEINIK 发布于 2周前 阅读 5229 评论 23 点赞 27 打赏 2

数据库中间件 MyCAT 源码分析 —— SQL ON MongoDB

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. 查询操作](#) - [4. 插入操作](#) - [5. 彩蛋](#) ------- # 1. 概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 1. 总体流程,让你有个整体的认识 2. 查询操作 3. 插入操作 4. 彩蛋,😈彩蛋,🙂彩蛋 建议你看过这两篇文章(_非必须_): 1. [《MyCAT 源码分析 —— 【单库单表】插入》](http://www.yunai.me/MyCAT/single-db-single-table-insert/?self) 2. [《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?self) # 2....
芋艿V 发布于 5天前 阅读 1344 评论 18 点赞 1

MySql-两阶段加锁协议

#MySql-两阶段加锁协议 ##前言 此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: ``` 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。 ``` ``` 2PC,两阶段提交协议:主要用于分布式事务。 ``` MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。 ##什么时候会加锁 在对记录更新操作或者(select for update、lock in share model)时,会对记录加锁(有共享锁、排它锁、意向锁、gap锁、nextkey锁等等),本文为了简单考虑,不考虑锁的种类。 ##什么是两阶段加锁 在一个事务里面,分为加锁(lock)阶段和解锁(unlock)阶段,也即所有的lock操作都在unlock操作之前,如下图所示: ![输入图片说明](https://static.oschina.net/uploads/img/201707/17105307_MZJc.png "在这里输入图片标题") ##为什么需要两阶段加锁 引入2PL是为了保证事务的隔离性,即多个事务在并发的情况下等同于串行的执行。 在数学上证明了如下的封锁定理: ``` 如果事务是良构的且是两阶段的,那么任何一个合法的调度都是隔离的。 ``` 具体的数学推到过程可以参照<<事务处理:概念与技术>>这本书的7.5.8.2节....
无毁的湖光-Al 发布于 1周前 阅读 682 评论 20 点赞 8

深入了解 gRPC:协议

RC3 版本对于 TiKV 来说最重要的功能就是支持了 gRPC,也就意味着后面大家可以非常方便的使用自己喜欢的语音对接 TiKV 了。 gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的,这里先简单介绍一下 HTTP/2 相关的知识,然后在介绍下 gRPC 是如何基于 HTTP/2 构建的。 ## HTTP/1.x HTTP 协议可以算是现阶段 Web 上面最通用的协议了,在之前很长一段时间,很多应用都是基于 HTTP/1.x 协议,HTTP/1.x 协议是一个文本协议,可读性非常好,但其实并不高效,笔者主要碰到过几个问题: ### Parser 如果要解析一个完整的 HTTP 请求,首先我们需要能正确的读出 HTTP header。HTTP header 各个 fields 使用 `\r\n` 分隔,然后跟 body 之间使用 `\r\n\r\n` 分隔。解析完 header 之后,我们才能从 header 里面的 `content-length` 拿到 body 的 size,从而读取 body。 这套流程其实并不高效,因为我们需要读取多次,才能将一个完整的 HTTP 请求给解析出来,虽然在代码实现上面,有很多优化方式,譬如: + 一次将一大块数据读取到 buffer 里面避免多次 IO read + 读取的时候直接匹配 `\r\n` 的方式流式解析 但上面的方式对于高性能服务来说,终归还是会有开销。其实最...
TiDB 发布于 6天前 阅读 743 评论 4

数据库中间件 MyCAT源码分析 —— 跨库两表Join

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. ShareJoin](#) - [3.1 JoinParser](#) - [3.2 ShareJoin.processSQL(...)](#) - [3.3 BatchSQLJob](#) - [3.4 ShareDBJoinHandler](#) - [3.5 ShareRowOutPutDataHandler](#) - [4. 彩蛋](#) ------- # 1. 概述 MyCAT 支持跨库表 Join,目前版本仅支持跨库**两**表 Join。虽然如此,已经能够满足我们大部分的业务场景。况且,Join 过多的表可能带来的性能问题也是很麻烦的。 本文主要分享: 1. 整体流程、调用顺序图 2. 核心代码的分析 前置阅读:[《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?yunai)。 OK,Let's Go。 # 2. 主流程 当执行...
芋艿V 发布于 2周前 阅读 1284 评论 1 点赞 2

数据库中间件 MyCAT源码分析 —— PreparedStatement 重新入门

相信很多同学在学习 JDBC 时,都碰到 PreparedStatement 和 Statement。究竟该使用哪个呢?最终很可能是【懵里懵懂】的看了各种总结,使用 PreparedStatement。那么本文,通过 MyCAT 对 PreparedStatement 的实现对大家能够重新理解下。 本文主要分成两部分: 1. JDBC Client 如何实现 PreparedStatement。 2. MyCAT Server 如何处理 PreparedStatement。
芋艿V 发布于 1周前 阅读 708

CentOS 6.9安装MySQL 5.6 (使用yum安装)

本文记录一次在CentOS上安装MySQL的步骤,采用yum安裝的方式~ 移除CentOS默认的mysql-libs [root@test01 srv]# whereis mysql mysql: /usr/lib64/mysql /usr/share/mysql [root@test01 srv]#  为了避免冲突,先移除CenttOS上默认的mysql-libs,使用yum remove mysql-libs完成,如: [root@test01 srv]# yum remove mysql-libs Loaded plugins: fastestmirror Setting up Remove Process Resolving Dependencies --> Running transaction check ---> Package mysql-libs.x86_64 0:5.1.73-8.el6_8 will be erased --> Processing Dependency: libmysqlclient.so.16()(64bit) for package: 2:postfix-2.6.6-8.el6.x86_64 --> Processing Dependency: libmysqlclient.so.16(libmysqlclient_16)(64bit) for package: 2:postfix-2.6.6-8.el6.x86_64 --> Processing Dependency: mysql-libs for package: 2:postfix-2.6.6-8.el6.x86_64 --> Running transaction check ---> Package postfix.x86_64 2:2.6.6-8.el6 will be erased --> Processing Dependency: /usr/sbin/sendmail for package: cronie-1.4.4-16.el6_8.2.x86_64 --> Running transaction check ---> Package cronie...
王孟君 发布于 2个月前 阅读 212

深度认识 Sharding-JDBC:做最轻量级的数据库中间层

Sharding-JDBC 采用在 JDBC 协议层扩展分库分表,是一个以 jar 形式提供服务的轻量级组件,其核心思路是小而美地完成最核心的事情。
编辑部的故事 发布于 3个月前 阅读 3129 评论 10 点赞 4

只会增删查改?你还缺个数据库管理工具!

任何web软件和应用程序都需要强大的数据库管理工具,因此开发者选择一款合适的数据库管理工具尤为重要。本文列出了几款好用的数据库管理工具(有些并非开源或免费),以供开发者们参考选择: 1、MySQL管理工具 phpMyAdmin phpMyAdmin是一个非常受欢迎的基于web的MySQL数据库管理工具。它能够创建和删除数据库,创建/删除/修改表格,删除/编辑/新增字段,执行SQL脚本等。 2、数据库管理工具 Navicat Lite  Navicat是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资 料库管理员、开发人员及中小企业的需求。 Navicat是以直觉化的使用者图形介面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。Navicat 支持的数据库包括 MySQL、Oracle、SQLite、PostgreSQL 和 SQL Server 等。 Navicat 提供商业版 Navicat Premium 和 免费的版本 Navicat Lite 。但目前 Navicat 已不再提供 LITE 版本。 缺点: 免费版本已停止更新。 3、数据库管理工具 DBeaver DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼...
编辑部的故事 发布于 3个月前 阅读 5647 评论 38 点赞 7

Redis 字符串

Redis 字符串相关应用详解
拿客-三产 发布于 2个月前 阅读 499

MySQL数据导出与导入

工具 mysql mysqldump 应用举例 导出 导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --lock-all-tables --add-drop-database -A > db.all.sql 导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --databases mysql > db.sql 导出某个库的表到本地的目录(例如mysql库的user表) mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --tables mysql user> db.table.sql 导出指定库的表(仅数据)到本地的目录(例如mysql库的user表,带过滤条件) mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-create-db --no-create-info --tables mysql user --where="host='localhost'"> db.table.sql 导出某个库的所有表结构 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-data --databases mysql > db.nodata.sql 导出某个查询sql的数据为txt格式文件到本地的目录(各数据值之间用"制表符"分隔) 例...
时光流转 发布于 8小时前 阅读 4

数据库中间件 为什么阅读 MyCAT 源码?

![](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- ## 为什么阅读 MyCAT 源码? * 深入了解**数据库中间件** ,知其然知其所以然。 * NIO 的实现 与 Netty 有什么特殊的地方? * 分布式事务如何实现的? * 内存管理 * SQL 解析 * 等等 ## 功能点 * [ ] NIO * [x] 分布式事务 * [ ] MyCAT 主从 * [x] 支持prepare预编译指令 * [ ] 自增序列 30% * [ ] 单库任意 Join Doing * [x] 跨库2表 Join * [ ] 跨库多表 Join * [ ] SQL 解析 * [ ] 读写分离 * [ ] MySQL 主从 * [ ] 自动故障切换 * [ ] Galera Cluster 集群 * [ ] MHA 集群 * [ ] Percona 集群 * [ ] 服务降级 * [ ] 多租户 * [ ] 路由 * [ ] MyCAT 集群 * [ ] 注解 * [ ] 缓存 * [ ] 监控 * [ ] Mongodb * [ ] 内存管理 20% ...
芋艿V 发布于 2天前 阅读 13

mysql 列用逗号隔开成多行数据

公司项目需要,用户所属行业,数据库存的是一个用户,多个行业,行业id 用逗号隔开,那么后台重构后,需要多条数据, 多谢网友的帖子指导: http://blog.csdn.net/ldl22847/article/details/47609727 ### sql如下 ``` select a.USER_ID,substring_index(substring_index(a.ATTENTION_INDUSTRY,',',b.help_topic_id+1),',',-1) industry,1,a.USER_ORDER,NOW(),NOW() from (select t.USER_ID ,t.ATTENTION_INDUSTRY ,t.USER_ORDER from lyx_oracle_ucenter.tab_uum_user_detail t where t.user_id in (select user_id from lyx_oracle_ucenter.tab_uum_users where company_id = 1) and t.ATTENTION_INDUSTRY is not null ) a join mysql.help_topic b on b.help_topic_id < (length(a.ATTENTION_INDUSTRY) - length(replace(a.ATTENTION_INDUSTRY,',',''))+1) order by a.USER_ID; ``` 这种方法的缺点在于,我们需要一个拥有连续数列的独立表(这里是incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。 例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。 当然,MySQL内部也有现成的连续数列表可用。如mysql.help_to...
杭州-IT东 发布于 13小时前 阅读 3

java写的spark程序的本地运行和集群运行

    用java写的一个简单的spark程序,通过本地运行和集群运行例子。     1    在eclipse下建一个maven工程     配置pom.xml 配置文件参考下面: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.spark</groupId> <artifactId>SparkTest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>SparkTest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.3.0</versio...
wzl_up 发布于 2个月前 阅读 79

mybatis中sql配置

对比${value} 和  #{xxx} 两者都可以接受JAVA简单类型,如int,也可以接受POJO,Map等复杂类型。如果是JAVA简单类型,那么$的方式必须是${value},而#{}可以随意,是因为在这种情况下,$会通过反射getValue()的方式取值。如果是POJO等复杂类型,2者其实都可以通过OGNL表达式取到,只不过#会额外的进行JAVA类型到数据库类型的转换,而$没有类型处理过程,它直接拼接。也就是说#会使用预编译成?,而$将在SQL编译阶段就采取替换操作,可能带来SQL注入的问题。所以在实际开发中,我们当然优先采用#的方式取值。
风格若干 发布于 10小时前 阅读 3

IntelliJ DataBase功能的使用,以MySql为例子

1. 输入MySql DB设置。可以点击Test Connection,测试是否连接成功。若失败,假设本机已经安装了MySql, 则可能是jar包和MySql版本的问题。选择合适的MySql或者jar包即可。 2. 可以使用最新的驱动,若报错则选择低版本的mysql驱动 3. 我们测试一下结果吧! 可能会遇到的问题: Unknown system variable 'lower_case_table_names' 转个帖子:lower_case_table_names的说明 可能是jar包和MySql版本的问题,选择合适的MySql或者jar包即可。
leonhu 发布于 3个月前 阅读 38

MYSQL坑爹的UPDATE子查询,UPDATE时避免使用子查询

近日写mysql储存过程的时候,有个SQL执行不动: UPDATE t_csi_comment SET is_valid = 0 WHERE comment_id IN ( SELECT comment_id FROM ( SELECT * FROM t_csi_comment WHERE DATE_FORMAT(comment_time, '%Y%m%d') BETWEEN 20170425 AND 20170528 ORDER BY comment_id DESC ) a GROUP BY openid, dlr_code HAVING count(1) > 2 ); 很奇怪,按道理这条SQL的检索量小于10W,应该怎么慢也不会几分钟不动的地步。 单独执行子查询: SELECT comment_id FROM ( SELECT * FROM t_csi_comment WHERE DATE_FORMAT(comment_time, '%Y%m%d') BETWEEN 20170425 AND 20170528 ORDER BY comment_id DESC ) a GROUP BY openid, dlr_code HAVING count(1) > 2; 结果比想象中的快,1秒都不到,EXPLAIN后检索量不到4W行。我就郁闷了。 EXPLANIN第一条update语句: 注意:select_type 里出现了 DEPENDENT SUBQUERY。 这意味着什么?——子查询取决于外面的查询,Mysql 先执行外查询,内查询根据这个查询结果(如执行计划里所述,38196 rows)的每一条记录组成新的查询语句后执行。多重子查询情...
伯洛芒果汁。 发布于 3个月前 阅读 515 评论 3 点赞 1

MySQL 死锁与日志二三事

最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现。甚至有些异常还比较诡异,最后 root cause 分析颇费周折。那实际业务当中咱们如何能快速的定位线上 MySQL 问题,修复异常呢?下文我会根据两个实际 case,分享下相关的经验与方法。 1、Case1:部分数据更新失败 某天渠道同学反馈某报表极个别渠道数据为 0,大部分渠道数据正常。这个数据是由一个统计程序每天凌晨例行更新的,按理来说,要么全部正常,要么全部失败,那会是什么原因导致极个别数据异常呢? 首先我们能想到的自然是根据统计任务日志来看了,但是看了统计程序打印的日志没有发现诸如 SQL update 失败的异常描述,那当时的数据库究竟发生了什么呢?在查看 MySQL-server 日志之前,习惯性的看了下数据库状态: SHOW ENGINE INNODB STATUS\G 恰好看到了凌晨这个 update 发生了死锁: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2017-07-17 04:09:01 0x7f6de03c8700 *** (1) TRANSACTION: TRANSACTION 215208479, ACTIVE 0 sec fetching rows mysql tables in use 3, locked 3 LOCK WAIT 5 lock stru...
xrzs 发布于 23小时前 阅读 909

数据库中间件 MyCAT源码分析 —— PreparedStatement 重新入门

相信很多同学在学习 JDBC 时,都碰到 PreparedStatement 和 Statement。究竟该使用哪个呢?最终很可能是【懵里懵懂】的看了各种总结,使用 PreparedStatement。那么本文,通过 MyCAT 对 PreparedStatement 的实现对大家能够重新理解下。 本文主要分成两部分: 1. JDBC Client 如何实现 PreparedStatement。 2. MyCAT Server 如何处理 PreparedStatement。
芋艿V 发布于 1周前 阅读 708

MySql-两阶段加锁协议

#MySql-两阶段加锁协议 ##前言 此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下: ``` 2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。 ``` ``` 2PC,两阶段提交协议:主要用于分布式事务。 ``` MySql本身针对性能,还有一个MVCC(多版本控制)控制,本文不考虑此种技术,仅仅考虑MySql本身的加锁协议。 ##什么时候会加锁 在对记录更新操作或者(select for update、lock in share model)时,会对记录加锁(有共享锁、排它锁、意向锁、gap锁、nextkey锁等等),本文为了简单考虑,不考虑锁的种类。 ##什么是两阶段加锁 在一个事务里面,分为加锁(lock)阶段和解锁(unlock)阶段,也即所有的lock操作都在unlock操作之前,如下图所示: ![输入图片说明](https://static.oschina.net/uploads/img/201707/17105307_MZJc.png "在这里输入图片标题") ##为什么需要两阶段加锁 引入2PL是为了保证事务的隔离性,即多个事务在并发的情况下等同于串行的执行。 在数学上证明了如下的封锁定理: ``` 如果事务是良构的且是两阶段的,那么任何一个合法的调度都是隔离的。 ``` 具体的数学推到过程可以参照<<事务处理:概念与技术>>这本书的7.5.8.2节....
无毁的湖光-Al 发布于 1周前 阅读 682 评论 20 点赞 8

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(一)之语法解析

![](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. Lexer 词法解析器](#) - [3. Token 词法标记](#) - [3.1 DefaultKeyword 词法关键词](#) - [3.2 Literals 词法字面量标记](#) - [3.2.1 Literals.IDENTIFIER 词法关键词](#) - [3.2.2 Literals.VARIABLE 变量](#) - [3.2.3 Literals.CHARS 字符串](#) - [3.2.4 Literals.HEX 十六进制](#) - [3.2.5 Literals.INT 整数](#) - [3.2.6 Literals.FLOAT 浮点数](#) - [3.3 Symbol 词法符号标记](#) - [3.4 Assist 词法辅助标记](#) - [4. 彩蛋](#) ------- # 1. 概述 **SQL 解析引擎**,数据库中间件必备的功能和流程。Sharding-JDBC 在 `1.5.0.M1` 正式发布时,将 SQL 解析引擎从 Druid 替换成了自研的。**新引...
芋艿V 发布于 1天前 阅读 310 评论 2 点赞 2

如何理解并正确使用MySql索引

1、概述 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧。 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 2、索引的优点 1、大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2、帮助服务器避免排序和临时表 3、可以将随机I/O变为顺序I/O 3、索引的创建 3.1、主键索引 ALTER TABLE 'table_name' ADD PRIMARY KEY 'index_name' ('column'); 3.2、唯一索引 ALTER TABLE 'table_name' ADD UNIQUE 'index_name' ('column'); 3.3、普通索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column'); 3.4、全文索引 ALTER TABLE 'table_name' ADD FULLTEXT 'index_name' ('column'); 3.5、组合索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column1', 'column2', ...); 4、B+Tree的索引规则 创建一个测试的用户表 DROP TABLE IF EXISTS user_test; CREATE TABLE user_test( id int AUTO_INCREMENT PRIMARY KEY, user_name varchar(30) NOT NULL, sex bit(1) NOT NULL DEFAULT b'1', city varc...
FEINIK 发布于 2周前 阅读 5229 评论 23 点赞 27 打赏 2

数据库中间件 MyCAT 源码分析 —— SQL ON MongoDB

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. 查询操作](#) - [4. 插入操作](#) - [5. 彩蛋](#) ------- # 1. 概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 1. 总体流程,让你有个整体的认识 2. 查询操作 3. 插入操作 4. 彩蛋,😈彩蛋,🙂彩蛋 建议你看过这两篇文章(_非必须_): 1. [《MyCAT 源码分析 —— 【单库单表】插入》](http://www.yunai.me/MyCAT/single-db-single-table-insert/?self) 2. [《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?self) # 2....
芋艿V 发布于 5天前 阅读 1344 评论 18 点赞 1

数据库中间件 MyCAT源码分析 —— 跨库两表Join

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. ShareJoin](#) - [3.1 JoinParser](#) - [3.2 ShareJoin.processSQL(...)](#) - [3.3 BatchSQLJob](#) - [3.4 ShareDBJoinHandler](#) - [3.5 ShareRowOutPutDataHandler](#) - [4. 彩蛋](#) ------- # 1. 概述 MyCAT 支持跨库表 Join,目前版本仅支持跨库**两**表 Join。虽然如此,已经能够满足我们大部分的业务场景。况且,Join 过多的表可能带来的性能问题也是很麻烦的。 本文主要分享: 1. 整体流程、调用顺序图 2. 核心代码的分析 前置阅读:[《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?yunai)。 OK,Let's Go。 # 2. 主流程 当执行...
芋艿V 发布于 2周前 阅读 1284 评论 1 点赞 2

深入了解 gRPC:协议

RC3 版本对于 TiKV 来说最重要的功能就是支持了 gRPC,也就意味着后面大家可以非常方便的使用自己喜欢的语音对接 TiKV 了。 gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的,这里先简单介绍一下 HTTP/2 相关的知识,然后在介绍下 gRPC 是如何基于 HTTP/2 构建的。 ## HTTP/1.x HTTP 协议可以算是现阶段 Web 上面最通用的协议了,在之前很长一段时间,很多应用都是基于 HTTP/1.x 协议,HTTP/1.x 协议是一个文本协议,可读性非常好,但其实并不高效,笔者主要碰到过几个问题: ### Parser 如果要解析一个完整的 HTTP 请求,首先我们需要能正确的读出 HTTP header。HTTP header 各个 fields 使用 `\r\n` 分隔,然后跟 body 之间使用 `\r\n\r\n` 分隔。解析完 header 之后,我们才能从 header 里面的 `content-length` 拿到 body 的 size,从而读取 body。 这套流程其实并不高效,因为我们需要读取多次,才能将一个完整的 HTTP 请求给解析出来,虽然在代码实现上面,有很多优化方式,譬如: + 一次将一大块数据读取到 buffer 里面避免多次 IO read + 读取的时候直接匹配 `\r\n` 的方式流式解析 但上面的方式对于高性能服务来说,终归还是会有开销。其实最...
TiDB 发布于 6天前 阅读 743 评论 4

MySQL timestamp NOT NULL插入NULL的问题

explicit_defaults_for_timestamp   MySQL 5.6版本引入 explicit_defaults_for_timestamp 来控制对timestamp NULL值的处理   如果该参数不开启,则对timestamp NOT NULL插入NULL值,不报错,无warning,插入后的值为当前时间 如果在my.cnf中explicit_defaults_for_timestamp=1 那么插入该值的时候会报错提示该列can not be null 建议开启该值 mysql> show variables like '%explicit_defaults_for_timestamp%'; +---------------------------------+-------+ | Variable_name                   | Value | +---------------------------------+-------+ | explicit_defaults_for_timestamp | OFF   | +---------------------------------+-------+ 1 row in set (0.00 sec)   mysql> show create table helei\G *************************** 1. row ***************************        Table: helei Create Table: CREATE TABLE `helei` (   `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.08 sec) mysql> select * from helei; Empty set (0.03 sec) mysql> insert into hele...
很好亦平凡ms 发布于 5天前 阅读 26

SDS较C字符串优势

1.获取字符串长度的复杂度 由于设置和更新SDS长度是由SDS的API在执行时自动完成,故取长度复杂度为O(1),而C字符串获取长度需要遍历整个字符串,故为O(n). 2.防止缓冲区溢出 以C字符串为例,如果将一个字符串拼接到另外一个字符串尾部,使用strcat(s1, "value"),如果在执行前未给s1分配足够空间,那么在s1修改后,会将s1的数据溢出到s2所在空间,这样就会导致s2值被意外修改. 但是SDS不会出现这种情况,因为它会自动扩展空间至修改所需大小,则不会出现溢出情况.需要注意的是使用指令sdscat(s, "value")后,假设s长度为5,则将SDS的长度修改为10,且将SDS未使用空间同样修改为10,这是SDS空间分配策略. 3.减少修改字符串时带来的内存重分配次数 SDS空间分配策略主要为空间预分配和惰性空间释放两种优化策略. 在扩展SDS空间之前,SDS API会检查未使用空间是否足够,若足够,则直接使用API,反之扩展空间,扩展时根据大小预扩展. 在缩短字符串操作时,SDS会将丢弃字符串多出来的空间留下来,用free表示大小,再次扩展时,检查free,若够则直接添加,反之再扩展. 4.二进制安全 对于C字符串来讲,无法识别空字符,就会出现"XXX YYY",只识别出了XXX;并且只能保存文本数据,不能保存图片等二进制数据. 但是对于...
勤奋的蚂蚁 发布于 6天前 阅读 17

Mysql5.6主从复制配置,实现读写分离

mysql-5.6.35-winx64 绿色安装板(Window)
路叫兽 发布于 4天前 阅读 19

十分钟成为 Contributor 系列 | 重构内建函数进度报告

--- title: 十分钟成为 Contributor 系列 | 重构内建函数进度报告 author: 徐怀宇 date: 2017-07-14 summary: 为了方便社区同学更好地参与 TiDB 项目,本文一方面对继上一篇文章发布后参考社区的反馈对表达式计算框架所做的修改进行详细介绍,另一方面对尚未重写的 built-in 函数进行陈列。 tags: TiDB Contributor --- 6 月 22 日,TiDB 发布了一篇如何十分钟成为 TiDB Contributor 系列的[第二篇文章](https://pingcap.com/blog-reconstruct-built-in-function-zh),向大家介绍如何为 TiDB 重构 built-in 函数。 截止到目前,得到了来自社区的积极支持与热情反馈,TiDB 参考社区 contributors 的建议,对计算框架进行了部分修改以降低社区同学参与的难度。 本文完成以下**2 项工作**,希望帮助社区更好的参与进 TiDB 的项目中来: 1. 对尚未重写的 built-in 函数进行陈列 2. 对继上篇文章后,计算框架所进行的修改,进行详细介绍 ### 一. 尚未重写的 built-in 函数陈列如下: 共计 165 个 在 expression 目录下运行 `grep -rn "^\tbaseBuiltinFunc$" -B 1 * | grep "Sig struct {" | awk -F "Sig" '{print $1}' | awk -F "builtin" '{print $3}' > ~/Desktop/func.txt` 命...
TiDB 发布于 1周前 阅读 86

MySQL count(*) 优化

在MySQL 5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算。 使用 实际上records接口函数是在优化阶段调用的,在满足一定条件时,直接去计算行级计数。其explain出来的结果相比老版本也有所不同,这里我们使用sysbench的sbtest表来进行测试,共200万行数据。 mysql> show create table sbtest1\G *************************** 1. row *************************** Table: sbtest1 Create Table: CREATE TABLE `sbtest1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`) ) ENGINE=InnoDB AUTO_INCREMENT=2000001 DEFAULT CHARSET=utf8 MAX_ROWS=1000000 1 row in set (0.00 sec) mysql> explain select count(*) from sbtest1\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: NULL partitions: NULL type: NULL possible_keys: NU...
IT--小哥 发布于 4天前 阅读 11

MySQL基于gtid特性与xtrabackup的数据恢复

通过备份文件新建从库,将binlog跑到指定的gtid位置,可以将数据恢复到指定的时间点。
o翡翠谷o 发布于 3周前 阅读 1643 评论 2 点赞 2

SQL Server递归查询无限级分类

``` WITH cte_parent(OrderOpenId, SharedOpenId, SubjectId) AS ( SELECT OrderOpenId, SharedOpenId, SubjectId FROM FriendsSharedInfo with(nolock) WHERE OrderOpenId = 'wx520c15f888888CCCSSSS' and SubjectId = 12 UNION ALL SELECT a.OrderOpenId, a.SharedOpenId, a.SubjectId FROM FriendsSharedInfo a with(nolock) INNER JOIN cte_parent b ON a.OrderOpenId = b.SharedOpenId and a.SubjectId = b.SubjectId and a.OrderOpenId != '' ) select top 1 OrderOpenId from cte_parent with(nolock) OPTION (MAXRECURSION 0) where SharedOpenId = ''; ```...
shawntime 发布于 4天前 阅读 15

【复制系列】基于binlog文件和位置的 传统复制

在MySQL中,利用复制,添加从库,通过从库提升读的能力和解决主库的故障,可以从从库提升出来一个新的主库,以达到高可用的目的。本文主要写了 传统复制的搭建 和 解读show slave status中的主要字段 两个方面。
star_glm 发布于 2周前 阅读 127

Redis和Memcached有什么区别?

memcached 和 redis 都很类似:都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。
dove_ztb 发布于 4天前 阅读 13

Mongodb3.4.4复制集群+分片配置文档

mongodb 集群 分片
guanshanyue1990 发布于 7天前 阅读 16

MySQL笔记01(启动 连接 error1366 修改默认编码 数据类型 数据库 表(增删改查) )

启动MySQL服务 方式1:     以管理员身份打开cmd,输入:         net  start  mysql 启动         net  stop  mysql 关闭 方式2:     控制面板 ---> 系统和安全  --->  管理工具  ---> 服务 ---> mysql 重新启动 连接MySQL: 方式1:     直接使用MySQL提供的命令行窗口 方式2:     在命令行(win + R)中输入     >mysql -uroot -p密码 -h数据库安装的主机 -P数据库端口     >mysql -uroot -pmima -h197.0.0.0 -P3306     如果连接的数据库是在本机上,并且端口号是3306     >mysql -uroot -p密码 navicat新建表table后,插入数据报错     1366 - Incorrect string value: '\xE9\x97\xAB' for column 'name' at row 1 MySQL1366解决方法:  修改MySQL该字段的字符集与整理规则 1.检查数据表所有字段的状态 >show full columns from table_name;    2.修改表中字段address的collation为utf8 >alter table table_name change address address varchar(100) character set utf8 collate utf8_unicode_ci not null default '';    3.再次检查数据表所有字段的状态 4.插入数据 5.往name中...
YK_IT 发布于 3天前 阅读 7

对MySQL交换分区的实践

前言 在介绍交换分区之前,我们先了解一下 mysql 分区。 数据库的分区有两种:水平分区和垂直分区。而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区。水平分区即:以行为单位对表进行分区。比如:按照时间分区,每一年一个分区等。 在MySQL中,分区是可以交换的,可以将一个分区表中的一个分区和一个普通表中的数据互换。   交换分区的实现 1、交换分区的语法 alter table pt exchange partition p with table nt; 解释: 将 分区表pt 的 分区p 和 一个普通表nt 中的数据 进行互换。 交换的前提条件: 普通表nt 不为临时表,且不是分区表。 表结构和分区表pt的结构一致。 普通表nt 没有外键引用。 普用表nt 若为非空。在MySQL5.6以及之前的版本,必须在分区的范围内;在MySQL5.7之后则可以不再其分区范围内,也依然会成功存入该分区中。 2、实验 交换分区 (1) 创建一个分区表,并插入数据 # 创建一个 分区表e CREATE TABLE e ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30) ) PARTITION BY RANGE (id) ( PARTITION p0 VALUES LESS THAN (50), PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LES...
star_glm 发布于 3周前 阅读 1848 评论 4 点赞 4

SQL慢查询在Greenplum/Deepgreen中的定位方法

# SQL慢查询在Greenplum/Deepgreen中的定位方法 在生产过程中,有的SQL查询往往会变得越来越慢,这时候,我们该怎么办呢?首当其冲的,我们可以通过查询计划来定位问题,今天就来谈谈如何在查询计划中定位这些慢查询产生的原因。 ## 1.查询计划中是否有操作耗时特别的长? 当我们分析查询计划时,是否有一个异常操作消耗了大部分的查询时间?比如,在执行索引扫描时,时间比预期的要长很多,这时候我们基本可以判断此索引可能已经超期了,需要重建。 ## 2.查询计划预估的时间和真实的时间接近吗? 我们通过运行**EXPLAIN ANALYZE**,查看执行计划预估的返回行数与实际返回的行数是否接近,如果出入很大,说明统计信息是有问题的,我们需要对相关表/列收集更多的统计信息。 ## 3.选择语句中的限定条件是否生效更早? 在执行计划中,选择性限定条件应该更早的应用,目的是让更少的数据返回到上层操作中。如果查询在选择性限定条件应用后表现并不好,返回的消耗依然很大,我们可以收集相关列的统计信息再看看是否会提高性能;另外,还可以通过调整SQL语句中不合理的**WHERE**条件来提高性能。 ## 4.查询计划是否选择了最佳的JOIN顺序? 当我们的查询里面有很多连接操作(JOIN)...
ChrisYuan 发布于 2小时前 阅读 1

mongodb的基础知识和增删改查相关操作

1.概念: 数据库 database   集合  collection(mysql中的表) 文档  document (mysqlZ中的行) 域   field      (mysql中的字段,列) 索引  index  主键  primary(自动将_id字段设置为主键) Mongodb 不支持表连接(table joins) 2.数据库相关介绍 1)一个mongodb中可以建立多个数据库 2)MongoDB的默认数据库为"db",该数据库存储在data目录中 3)MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中 4)系统保留的数据库: admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。 local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合 config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息 5)集合:       集合类似于关系数据库中的表.      集合存在于数据库中,集合没有固定的结构,意味着在对集合可以插入不同格式和类型的数据       第一个文档插入时,集合就会被创建   ...
渺渺星辰 发布于 7小时前 阅读 3

存储过程学习 10种语法

  1、 创建语法 create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据类型} [=默认值] [output], .... ] as SQL_statements  2、 创建不带参数存储过程 --创建存储过程 if (exists (select * from sys.objects where name = 'proc_get_student')) drop proc proc_get_student go create proc proc_get_student as select * from student; --调用、执行存储过程 exec proc_get_student; 3、 修改存储过程 --修改存储过程 alter proc proc_get_student as select * from student; 4、 带参存储过程  --带参存储过程 if (object_id('proc_find_stu', 'P') is not null) drop proc proc_find_stu go create proc proc_find_stu(@startId int, @endId int) as select * from student where id between @startId and @endId go exec proc_find_stu 2, 4; 5、 带通配符参数存储过程  --带通配符参数存储过程 if (object_id('proc_findStudentByName', 'P') is not null) drop proc proc_findStudentByName go create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20...
颖辉小居 发布于 7小时前 阅读 1

同意不同列多字段分组查询

某表有如下4个字段   上面是 选手A 、选手B、 A胜局数、  B胜局数的字段 现在要得到 每个选手的 胜场数,胜局数,败局数 只要每条数据(一场比赛)中,该名选手的胜局数大于对方的胜局数既是比赛胜利,胜场数加一。 每名选手在一场比赛里既可能是PlayerA,也可能是PlayerB。 经过尝试得出下面答案,思路比较简单需要先查出两种结果集再并集之后分组得出最终结果 select t.name 姓名, SUM(win) 胜场,SUM(winf) 胜局,SUM(failf) 败局 from (SELECT playerB name,sum(case when recordB>recordA then 1 else 0 end) win, sum(recordB) winf ,sum(recordA) failf from billboard_record GROUP BY playerB UNION ALL SELECT playerA name,sum(case when recordA>recordB then 1 else 0 end) win, sum(recordA) winf ,sum(recordB) failf from billboard_record GROUP BY playerA ) t GROUP BY t.name 查询结果:  ...
颖辉小居 发布于 8小时前 阅读 1

2017年全国计算机等级考试部分级别和科目调整

  教育部考试中心发布了《关于做好2017年全国计算机等级考试工作的通知》(教试中心函〔2016〕237号),定于2017年开始对全国计算机等级考试部分级别和科目进行调整,具体内容如下:   1、自2017年3月考试起,二级Access数据库程序设计(科目代码29)将使用新版考试大纲(2016年版)。   2、2017年下半年二级Visual FoxPro数据库程序设计(科目代码27)最后一次组考,2018年起将停考该科目。   3、自2018年3月考试起调整三级获证条件要求,考生只需通过三级考试即可获得该三级科目的合格证书,不再要求二级证书,其他级别获证条件保持不变。   4、为加强考风考纪管理,单次考试每名考生最多可报3个科目,严禁考生单次考试重复报考相同科目,否则将按照违规处理。   最全面2017年9月专用计算机《二级access数据库》全套包过-钟老师视频教程      课程目标:全国计算机《ACCESS数据库》科目,含二级公共基础。本课程配:配套资料和素材有《二级公共基础参考手册》、《ACCESS上机强化练习手册》、《二级ACCESS习题手册》、《ACCESS无纸化操作真题手册》--掌握所有考试要点及练习,确保拿到40分选择题,60分操作题!   适合人群:备考全国计算机等级考试《二级acces...
课课家IT 发布于 8小时前

MySQL数据导出与导入

工具 mysql mysqldump 应用举例 导出 导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --lock-all-tables --add-drop-database -A > db.all.sql 导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --databases mysql > db.sql 导出某个库的表到本地的目录(例如mysql库的user表) mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --tables mysql user> db.table.sql 导出指定库的表(仅数据)到本地的目录(例如mysql库的user表,带过滤条件) mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-create-db --no-create-info --tables mysql user --where="host='localhost'"> db.table.sql 导出某个库的所有表结构 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-data --databases mysql > db.nodata.sql 导出某个查询sql的数据为txt格式文件到本地的目录(各数据值之间用"制表符"分隔) 例...
时光流转 发布于 8小时前 阅读 4

mybatis中sql配置

对比${value} 和  #{xxx} 两者都可以接受JAVA简单类型,如int,也可以接受POJO,Map等复杂类型。如果是JAVA简单类型,那么$的方式必须是${value},而#{}可以随意,是因为在这种情况下,$会通过反射getValue()的方式取值。如果是POJO等复杂类型,2者其实都可以通过OGNL表达式取到,只不过#会额外的进行JAVA类型到数据库类型的转换,而$没有类型处理过程,它直接拼接。也就是说#会使用预编译成?,而$将在SQL编译阶段就采取替换操作,可能带来SQL注入的问题。所以在实际开发中,我们当然优先采用#的方式取值。
风格若干 发布于 10小时前 阅读 3

mysql 5.7.19 windows zip包启动

       在mysql官网上下了一个mysql-5.7.19-winx64.zip,解压后增加一个my.ini配置文件放到根目录。配置项如下:  [mysql] # 设置mysql客户端默认字符集   default-character-set=utf8 [mysqld] # 设置3306端口   port = 3306 # 设置mysql的安装目录   basedir=E:\\resource\\mysql-5.7.19-winx64   # 设置mysql数据库的数据的存放目录   datadir=E:\\resource\\mysql-5.7.19-winx64\\data   # 允许最大连接数   max_connections=200   # 服务端使用的字符集默认为8比特编码的latin1字符集   character-set-server=utf8   # 创建新表时将使用的默认存储引擎   default-storage-engine=INNODB    # 跳过密码验证   #skip-grant-tables        执行mysqld命令启动服务器,一直报错。在网上查到一个帖子解决了这个问题,记录如下。      1.命令行执行: mysqld --initialize --user=mysql --console          先执行以上命令, 生成库. 注意有个临时密码, 要记下来.      2.执行命令mysqld启动mysql服务器.       3.打开一个新命令行窗口,执行登录命令:         mysql -uroot -p      输入密码      登录成功后...
东方财富 发布于 10小时前 阅读 2

mongodb的安装

1.MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。 2.下载地址:http://downloads.mongodb.org/linux/mongodb-linux-i686-latest.tgz     linux所有版本:https://www.mongodb.org/dl/linux/    官网: https://www.mongodb.com/ 3.安装:   1)tar -zxvf mongodb-linux-i686-latest.tgz  2)cp mongodb-linux-i686-3.3.3*  /usr/local/  3)创建数据目录(默认情况下是安装到/data/db中但是此目录需要自己建立),此处目录设置为:/usr/local/mongodb/data/db 4)安装:   /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/db 报错:         报错1.   32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.   解释:32bit版本的mongodb默认不开journal记录,如果需要的话,在运行时加上--journal开关. 报错2:   exception...
渺渺星辰 发布于 11小时前 阅读 2

mysql 列用逗号隔开成多行数据

公司项目需要,用户所属行业,数据库存的是一个用户,多个行业,行业id 用逗号隔开,那么后台重构后,需要多条数据, 多谢网友的帖子指导: http://blog.csdn.net/ldl22847/article/details/47609727 ### sql如下 ``` select a.USER_ID,substring_index(substring_index(a.ATTENTION_INDUSTRY,',',b.help_topic_id+1),',',-1) industry,1,a.USER_ORDER,NOW(),NOW() from (select t.USER_ID ,t.ATTENTION_INDUSTRY ,t.USER_ORDER from lyx_oracle_ucenter.tab_uum_user_detail t where t.user_id in (select user_id from lyx_oracle_ucenter.tab_uum_users where company_id = 1) and t.ATTENTION_INDUSTRY is not null ) a join mysql.help_topic b on b.help_topic_id < (length(a.ATTENTION_INDUSTRY) - length(replace(a.ATTENTION_INDUSTRY,',',''))+1) order by a.USER_ID; ``` 这种方法的缺点在于,我们需要一个拥有连续数列的独立表(这里是incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。 例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。 当然,MySQL内部也有现成的连续数列表可用。如mysql.help_to...
杭州-IT东 发布于 13小时前 阅读 3

MySQL 死锁与日志二三事

最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现。甚至有些异常还比较诡异,最后 root cause 分析颇费周折。那实际业务当中咱们如何能快速的定位线上 MySQL 问题,修复异常呢?下文我会根据两个实际 case,分享下相关的经验与方法。 1、Case1:部分数据更新失败 某天渠道同学反馈某报表极个别渠道数据为 0,大部分渠道数据正常。这个数据是由一个统计程序每天凌晨例行更新的,按理来说,要么全部正常,要么全部失败,那会是什么原因导致极个别数据异常呢? 首先我们能想到的自然是根据统计任务日志来看了,但是看了统计程序打印的日志没有发现诸如 SQL update 失败的异常描述,那当时的数据库究竟发生了什么呢?在查看 MySQL-server 日志之前,习惯性的看了下数据库状态: SHOW ENGINE INNODB STATUS\G 恰好看到了凌晨这个 update 发生了死锁: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2017-07-17 04:09:01 0x7f6de03c8700 *** (1) TRANSACTION: TRANSACTION 215208479, ACTIVE 0 sec fetching rows mysql tables in use 3, locked 3 LOCK WAIT 5 lock stru...
xrzs 发布于 23小时前 阅读 909

数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(一)之语法解析

![](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. Lexer 词法解析器](#) - [3. Token 词法标记](#) - [3.1 DefaultKeyword 词法关键词](#) - [3.2 Literals 词法字面量标记](#) - [3.2.1 Literals.IDENTIFIER 词法关键词](#) - [3.2.2 Literals.VARIABLE 变量](#) - [3.2.3 Literals.CHARS 字符串](#) - [3.2.4 Literals.HEX 十六进制](#) - [3.2.5 Literals.INT 整数](#) - [3.2.6 Literals.FLOAT 浮点数](#) - [3.3 Symbol 词法符号标记](#) - [3.4 Assist 词法辅助标记](#) - [4. 彩蛋](#) ------- # 1. 概述 **SQL 解析引擎**,数据库中间件必备的功能和流程。Sharding-JDBC 在 `1.5.0.M1` 正式发布时,将 SQL 解析引擎从 Druid 替换成了自研的。**新引...
芋艿V 发布于 1天前 阅读 310 评论 2 点赞 2

MySQL基础 -- SQL基础总结(一)

SQL是一种声明式的高级查询语言。使用SQL时,只需要描述希望怎样获取数据,而不用考虑具体的算法实现。 1、变量 1.1、用户变量 用户变量和连接相关。用户变量和在函数和存储过程中通过DECLARE语句声明的局部变量不同: 用户变量: 一个客户端定义的变量仅限于该客户端连接使用 当客户端退出时,该客户端连接的所有变量将自动释放 局部变量: 和客户端连接无关 声明周期仅限于“BEGIN ... END”代码块内 使用用户变量的语法为: SET @var_name=expr[,@var_name=expr]... 其中变量的值可以为整数、实数、字符串或者NULL。 例如: 还可以在sql语句中引用用户变量: 也可以通过SQL语句对用户变量进行赋值,但是注意,变量值只能是NULL或者单个值,而不能是一个表。例如: 1.2、系统变量 MySQL服务器维护着两种系统变量: 全局变量:影响MySQL服务的整体运行方式 会话变量:影响具体客户端连接的操作 1.2.1、全局变量 当服务器启动时,它将所有的全局变量初始化为默认值(默认值可以通过选项文件中或者在命令行中修改)。 当服务器启动后,可以通过SQL语句动态修改,具体语法如下: SET GLOBAL var_name = value SET @@global.var_name = value 检索一个GLOBAL变量的语法如下: ...
兴趣使然的程序员 发布于 1天前 阅读 5

BTREE索引和HASH索引

MEMORY存储引擎的表可以选择使用BTREE所以或者HASH索引,两种不同类型的索引各有其不同的适用范围。HASH有一些重要的特征在使用的使用需要注意,比如:只用于使用=或<=>操作符的等式比较。优化器不能使用HASH索引来加速order by操作。Mysql不能确定在两个值之间大约有多少行,如果将一个MyISAM表改为HASH索引的MEMORY表,会影响一些查询的执行效率。只能使用整个挂件自来搜索一行。 而对于BTREE索引,当时有<、>、>=、<=、!=、between或者like 'pattern'(其中不以通配符开始)操作符时,都可以使用相关列上的索引 select * from t1 where key_col = 1 or key_col in(12,23,21);这个范围查询适用于BTREE索引和HASH索引 下面示例只适用于BTREE索引 select * from t1 where key_col >1 and key_col < 10; select * from t1 where key_col like 'a%' or key_col between 'lili' and 'simon'; 默认hash索引 创建memory表 这边创建了存储引擎为memory的表,可以从第一张表看到默认的表索引是HASH,所以在查询的时候,默认的type就是全文搜索了。 BTREE索引 如果是BTREE索引那么可以通过索引访问。 范围搜索 在使用索引的时候需要注意MEMORY表时,要注意sql的写法。...
孟飞阳 发布于 1天前 阅读 1

MongoDB数据库基础操作

前面的话 为了保存网站的用户数据和业务数据,通常需要一个数据库。MongoDB和Node.js特别般配,因为Mongodb是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和JavaScript语法很像。本文将详细介绍MongoDB数据库 数据库 数据库,顾名思义,是数据存储的仓库,主要功能有两个 1、有组织地存放数据 与在磁盘上自己存放文件不同,数据库替用户组织了数据的存储形式,用户只需要按照数据库提供的接口将数据写入,数据便会按照标准的格式被存储起来 2、按照不同的需求进行查询 数据库不仅要能写入数据,还支持数据查询,并且能够按照不同的需求进行查询。因为存储是有组织的,因此查询上可以更规范化,查询速度也会快很多 不同的数据库的区别就是存放数据的组织不同,同时提供了不同种类的查询。用户可以按照自己的需求,选择合适的数据库 【分类】 数据库的分类有很多种,按照对SQL语言的支持,可以分为以下两种: 1、SQL数据库,比如Oracle、Mysql等 2、NoSQL数据库,比如Redis、MongoDB等 随着在规模互联网应用的出现,传统的SQL数据库遇到了一些设计上的弊端。比如,SQL对表的定义使应用不够灵活,横向扩展比较困难。...
孟飞阳 发布于 1天前

MySQL笔记03 (存储过程 触发器 权限 备份恢复)

存储过程     存储过程,带有逻辑的sql语句     之前的sql没有条件的判断,没有循环,存储过程带上流程控制语句(if  while)     执行效率非常快,存储过程是在数据库的服务器端执行的     移植性很差,不同数据库的存储过程是不能移植的。 #创建存储过程 >DELIMITER $ # 声明存储过程的结束符 >CREATE PROCEDURE pro_test() # 存储过程名称(参数列表) >BEGIN # 开始 # 可以写多个sql语句; # sql语句+流程控制 > SELECT * FROM employee; >END $ # 结束 结束符 # 执行存储过程 CALL pro_test(); # CALL 存储过程名称(参数); 参数: IN: 表示输入参数,可以携带数据到存储过程中 OUT: 表示输出参数,可以从存储过程中返回结果 INOUT:表示输入输出参数,既可以输入功能,也可以输出功能     带有输入参数的存储过程 delimiter $ create procedure pro_findById(in eid int) # in 输入参数 begin select * from employee where id = eid; end $             call pro_findById(2); #调用 ================================================...
YK_IT 发布于 1天前 阅读 3

MySql开发常规

MySql开发常规
NO17 发布于 1天前 阅读 6

静默安装grid 中 crs错误

先描述一下报错描述: /u01/oracle/grid/bin/clscfg.bin: error while loading shared libraries: libcap.so.1: cannot open shared object file: No such file or directory Failed to create keys in the OLR, rc = 127, Message: Failed to write the checkpoint:'' with status:FAIL.Error code is 256 Failed to create keys in the OLR at /u01/oracle/grid/crs/install/crsconfig_lib.pm line 7497. 在grid安装完成之后需要运行root.sh脚本,但是经常会出现上面的错误。进过查证是缺少compat-libcap1-1.10-1。需要安装上compat-libcap1-1.10-1 并删除之前的crs 并重新运行root.sh 应该就可以了。 [root@dgslave oracle]# yum list|grep compat-libca compat-libcap1.i686 1.10-1 cdrom compat-libcap1.x86_64 1.10-1 cdrom [root@dgslave oracle]# yum install compat-libcap1.x86_64 -y 下面删除原来的crs perl $GRID_HOME/crs/install/rootcrs.pl -verbose -deconfig -force [root@dgslave oracle]# perl /u01/oracle/grid/crs/install/rootcrs.pl -verbose...
wzl_up 发布于 1天前 阅读 4

MySQL笔记02 (数据约束 关联查询-多表查询)

数据约束         对用户操作表的数据进行约束     默认值:         当用户对使用默认值的字段不插入值的时候,就使用默认值。         对默认值字段可以插入null或非null create table test( id int, name varchar(100), address varchar(200) default '北京' );         当字段没有插入值的时候,自动给该字段分配默认值         >insert into test(id,name) values(1,'闫');         默认值的字段允许为null         >insert into test values(2,'宽','江西');         >insert into test values(3,'宽',null);                  非空         限制字段必须赋值         非空字符必须赋值,不能赋null create table test( id int, name varchar(20), gender varchar(2) not null );      >insert into test(id,name) values(1,'闫'); #1364-Field 'gender'doesn'thave a default value      >insert into test values(3,'宽',null);  #  1048 - Column 'gender' cannot be null     唯一         对字段的值不能重复         唯一字...
YK_IT 发布于 2天前 阅读 2

数据库中间件 为什么阅读 MyCAT 源码?

![](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- ## 为什么阅读 MyCAT 源码? * 深入了解**数据库中间件** ,知其然知其所以然。 * NIO 的实现 与 Netty 有什么特殊的地方? * 分布式事务如何实现的? * 内存管理 * SQL 解析 * 等等 ## 功能点 * [ ] NIO * [x] 分布式事务 * [ ] MyCAT 主从 * [x] 支持prepare预编译指令 * [ ] 自增序列 30% * [ ] 单库任意 Join Doing * [x] 跨库2表 Join * [ ] 跨库多表 Join * [ ] SQL 解析 * [ ] 读写分离 * [ ] MySQL 主从 * [ ] 自动故障切换 * [ ] Galera Cluster 集群 * [ ] MHA 集群 * [ ] Percona 集群 * [ ] 服务降级 * [ ] 多租户 * [ ] 路由 * [ ] MyCAT 集群 * [ ] 注解 * [ ] 缓存 * [ ] 监控 * [ ] Mongodb * [ ] 内存管理 20% ...
芋艿V 发布于 2天前 阅读 13

数据库中间件 MyCAT 源码分析 —— SQL ON MongoDB

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. 查询操作](#) - [4. 插入操作](#) - [5. 彩蛋](#) ------- # 1. 概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 1. 总体流程,让你有个整体的认识 2. 查询操作 3. 插入操作 4. 彩蛋,😈彩蛋,🙂彩蛋 建议你看过这两篇文章(_非必须_): 1. [《MyCAT 源码分析 —— 【单库单表】插入》](http://www.yunai.me/MyCAT/single-db-single-table-insert/?self) 2. [《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?self) # 2....
芋艿V 发布于 5天前 阅读 1344 评论 18 点赞 1

数据库中间件 MyCAT源码分析 —— 跨库两表Join

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. ShareJoin](#) - [3.1 JoinParser](#) - [3.2 ShareJoin.processSQL(...)](#) - [3.3 BatchSQLJob](#) - [3.4 ShareDBJoinHandler](#) - [3.5 ShareRowOutPutDataHandler](#) - [4. 彩蛋](#) ------- # 1. 概述 MyCAT 支持跨库表 Join,目前版本仅支持跨库**两**表 Join。虽然如此,已经能够满足我们大部分的业务场景。况且,Join 过多的表可能带来的性能问题也是很麻烦的。 本文主要分享: 1. 整体流程、调用顺序图 2. 核心代码的分析 前置阅读:[《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?yunai)。 OK,Let's Go。 # 2. 主流程 当执行...
芋艿V 发布于 2周前 阅读 1284 评论 1 点赞 2

如何理解并正确使用MySql索引

1、概述 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧。 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 2、索引的优点 1、大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2、帮助服务器避免排序和临时表 3、可以将随机I/O变为顺序I/O 3、索引的创建 3.1、主键索引 ALTER TABLE 'table_name' ADD PRIMARY KEY 'index_name' ('column'); 3.2、唯一索引 ALTER TABLE 'table_name' ADD UNIQUE 'index_name' ('column'); 3.3、普通索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column'); 3.4、全文索引 ALTER TABLE 'table_name' ADD FULLTEXT 'index_name' ('column'); 3.5、组合索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column1', 'column2', ...); 4、B+Tree的索引规则 创建一个测试的用户表 DROP TABLE IF EXISTS user_test; CREATE TABLE user_test( id int AUTO_INCREMENT PRIMARY KEY, user_name varchar(30) NOT NULL, sex bit(1) NOT NULL DEFAULT b'1', city varc...
FEINIK 发布于 2周前 阅读 5229 评论 23 点赞 27 打赏 2

MySQL基于gtid特性与xtrabackup的数据恢复

通过备份文件新建从库,将binlog跑到指定的gtid位置,可以将数据恢复到指定的时间点。
o翡翠谷o 发布于 3周前 阅读 1643 评论 2 点赞 2

对MySQL交换分区的实践

前言 在介绍交换分区之前,我们先了解一下 mysql 分区。 数据库的分区有两种:水平分区和垂直分区。而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区。水平分区即:以行为单位对表进行分区。比如:按照时间分区,每一年一个分区等。 在MySQL中,分区是可以交换的,可以将一个分区表中的一个分区和一个普通表中的数据互换。   交换分区的实现 1、交换分区的语法 alter table pt exchange partition p with table nt; 解释: 将 分区表pt 的 分区p 和 一个普通表nt 中的数据 进行互换。 交换的前提条件: 普通表nt 不为临时表,且不是分区表。 表结构和分区表pt的结构一致。 普通表nt 没有外键引用。 普用表nt 若为非空。在MySQL5.6以及之前的版本,必须在分区的范围内;在MySQL5.7之后则可以不再其分区范围内,也依然会成功存入该分区中。 2、实验 交换分区 (1) 创建一个分区表,并插入数据 # 创建一个 分区表e CREATE TABLE e ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30) ) PARTITION BY RANGE (id) ( PARTITION p0 VALUES LESS THAN (50), PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LES...
star_glm 发布于 3周前 阅读 1848 评论 4 点赞 4

三篇文章了解 TiDB 技术内幕 —— 谈调度

任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外。 前两篇文章介绍了 TiKV、TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都是大家看得见的东西。在这两个组件的后面,还有一个叫做 PD(Placement Driver)的组件,虽然不直接和业务接触,但是这个组件是整个集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度。 本篇文章介绍一下这个神秘的模块。这部分比较复杂,很多东西大家平时不会想到,也很少在其他文章中见到类似的东西的描述。我们还是按照前两篇的思路,先讲我们需要什么样的功能,再讲我们如何实现,大家带着需求去看实现,会更容易的理解我们做这些设计时背后的考量。 # 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 KV 存储引擎,数据以 Region 为单位进行复制和管理,每个 Region 会有多个 Replica(副本),这些 Replica 会分布在不同的 TiKV 节点上,其中 Leader 负责读/写,Follower 负责同步 Leader 发来的 raft log。了解了这些信息后,请思考下面这些问题: * 如何保证同一个 Region 的多个 Replica 分布在不同的节点上?更进一...
TiDB 发布于 2个月前 阅读 1016 评论 3 点赞 1

Mongodb高可用集群搭建

最近公司项目要求Mongodb集群且高可用,在查询了一系列文章,再结合项目实际情况,所以采用了这一套高可用集群方案
Crazy_Coder 发布于 2个月前 阅读 1908 评论 5 点赞 7

实验:MySQL使用JDBC执行批处理性能测试

实验:MySQL使用JDBC执行批处理性能测试
IamOkay 发布于 4个月前 阅读 1896 评论 10 点赞 6

记一次mysql性能优化过程

所谓mysql的优化,三分是配置的优化,七分是sql语句的优化,通过一些案例分析,希望给大家在工作中带来一些思路
成熟的毛毛虫 发布于 5个月前 阅读 6105 评论 57 点赞 36 打赏 3

NoSQL介绍

对nosql出现背景、nosql类型做介绍,并解答nosql相关问题
lzhaoqiang 发布于 5个月前 阅读 1516 评论 1 点赞 4

Linux服务器安装Oracle服务端总结

通过ssh远程连接linux服务器,上传Oracle11g的安装包,在无图形化界面的情况,安装Oracle服务器端。本例中linux服务器系统为CentOS6.5.
黎嘉诚 发布于 6个月前 阅读 3342 评论 27 点赞 3

【技术解密】SequoiaDB复制组选举原理说明

1.SequoiaDB介绍 SequoiaDB是国内一款自主研发的分布式文档型数据库。它与过去开发者所熟悉的关系型数据库不同,它的数据结构是BSON类型,一种与JSON结构非常相近的数据类型。 SequoiaDB与关系型数据库除了在数据类型上有比较明显的差异外,还原生支持分布式存储。用户在搭建一个能够应对海量数据以及包含高并发操作的系统时,不再需要像过去一样,在业务层面做复杂的分表分库工作,直接在定义数据表时,明确告诉数据库此表需要根据哪个字段以及何种规则进行分布式存储,数据分布式存储对于用户来说变得透明。用户可以更加专注以业务逻辑开发,而不是关注如何分表分库。 2.SequoiaDB总体架构介绍   图1:SequoiaDB 总体架构示意图 SequoiaDB整个集群中,主要角色构成是三个,协调节点,编目节点和数据节点。 1.1 协调节点 协调节点(英文称呼为Coord),是SequoiaDB的任务分发节点(一般用户成为Master节点),本身不存储任何数据,主要负责接收应用程序的访问请求。所以一般用户在与SequoiaDB打交道时,访问的都是协调节点,对于其他角色的节点,一般情况下是不建议用户去访问的。 在SequoiaDB老版本中,协调节点在数据库集群中是类似孤岛式部署的。怎么说呢,主要因为...
巨杉数据库 发布于 6个月前 阅读 790 点赞 1

redis 主从配置

redis主从复制过程:  当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。master同步数据时是非阻塞式的,可以接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化 拥有主从服务器的好处(从服务器是只读的,可以一主多从) 1.    主服务器进行读写时,会转移到从读,减轻服务器压力 2.    热备份 主从都可以设置密码,也可以密码不一致   进入/usr/data/redis/slave 创建 master  slave1  slave2 1.复制redis.conf到3个目录,修改端口 1000,2000,3000 ...
lyg945 发布于 8个月前 阅读 4937 评论 20 点赞 12

Redis基数统计——HyperLogLog小内存大用处

摘自本人 http://irfen.me/redis-hyperloglog-intro/ 我们一直都知道,redis几大常用数据结构,字符串、散列、列表、集合、有序集合。其实后来Redis做了很多补充,其中之一就是HyperLogLog,另外的还有GEO(地理位置),是3.2版本加的。 这里我们就来简单介绍下HyperLogLog结构。 先说用处:这个结构可以非常省内存的去统计各种计数,比如注册ip数、每日访问IP数、页面实时UV(PV肯定字符串就搞定了)、在线用户数等。 这里看到所有的用处都是xxx数,所以这个数据结构的特点就是,可以比较准确的估算出你要统计的数量,但是却无法知道统计的详细内容。比如统计每日访问IP数,可以获取当时访问过的IP总数量,但是没法知道这些IP都是什么。 有得必有失,当然你要统计上面提到的那些内容,可以用集合来处理,这样可以知道数量,也能获得所有的详细列表。但是一个大型的网站,每天IP比如有100万个呢,我们粗算一个IP消耗15字节,那么100万个IP就是15M,如果1千万,就是150M。 再来看看我们的HyperLogLog,在Redis中每个键占用的内容都是12K,理论存储近似接近2^64个值,不管存储的内容是什么。12K,知道这个数据结构的作用了吧。这也是为什么他不能知道里面的详细内容了。这是...
赵伊凡 发布于 9个月前 阅读 2137 评论 1 点赞 3

PingCAP唐刘:基于Raft构建分布式系统TiKV

2016年9月10日,第52期【OSC源创会】在珠海圆满落幕,350余名OSCer齐聚报业大厦,聆听了一场诚意满满的技术分享盛会。本期源创会由5位讲师分别针对5个不同的主题进行分享,为给未能到现场以及参与活动后仍意犹未尽的OSCer更好的了解和学习,开源中国将每位讲师的演讲内容进行了整理,并将逐一发布。干货多多,不容错过! PingCAP 是国内的一家完全走开源路线的 startup,专注于构建下一代分布式数据库及生态系统,代表作品 TiDB。本期源创会,来自 PingCAP 的首席架构师唐刘,对分布式一致性算法 Raft,以及他们是如何使用 Raft 进行分布式系统 TiKV 的开发进行了介绍与分享。 嘉宾介绍: 唐刘,PingCAP 首席架构师,现致力于下一代分布式数据库 TiDB、分布式存储 TiKV 的开发。开源爱好者,Go、Rust 等语言爱好者和实践者。 分享亮点: 1、 Raft 算法将 Server 划分为3种角色,Leader、Follower 和 Follower,每个 Term 至多存在1个 Leader,每个 Server 本地维护 currentTerm。 2、TiKV 和 TiDB可以看作对应着 Google Spanner 和 F1,用 Open Source 方式重建。 3、TiDB 是使用 Go 编写的,TiKV 是用 Rust 编写的,TiDB 在 TiKV 上层。 4、 TiKV 基于 Raft ,每一个 ...
王练 发布于 10个月前 阅读 1311 评论 2 点赞 2

MySQL应用优化

本文从MySQL语句优化、引擎选择、数据库设计三个方面介绍如何进行MySQL应用优化
lonelydawn 发布于 1年前 阅读 4056 评论 20 点赞 6

用Haproxy来做PostgreSQL的负载均衡

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,可以用来做web或者数据库的负载均衡,在一定范围内读写能力与添加的服务器数量成正比。haproxy用来做mysql负载均衡的文章很多,这里简单介绍下配合postgresql的使用。 一、环境 Centos 6.7 PostgreSQL 9.5.2 Haproxy 1.6 虚机服务列表 haproxy ip 192.168.226.148 (pg agent) datanode1 ip 192.168.226.133 (pg server) datanode2 ip 192.168.226.143 (pg server) 二、软件安装 #yum install gcc gcc-c++ make #groupadd haproxy #useradd haproxy –g haproxy -s /sbin/nologin #wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.4.tar.gz #cd haproxy-1.6.4 #make TARGET=linux2628 PREFIX=/usr/local/haproxy #make install PREFIX=/usr/local/haproxy #mkdir -p /etc/haproxy/ #cp examples/haproxy.init /etc/init.d/haproxy #chmod +x /etc/init.d/haproxy #ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/ 三、软件配置 1.主要配置文件haproxy.cfg [root@localhost ~]# vi /etc/haproxy/haproxy.cfg global log 127.0.0.1 local0 info maxconn 4096 user haproxy group haproxy dae...
kenyon_君羊 发布于 1年前 阅读 4986 评论 25 点赞 10

Couchbase 中的分布式储存

Couchbase 是一个具有高性能、可扩展性和可 用性强的数据库引擎。它可以让开发人员通过 NoSQL 的键值存储(二进制或者JSON)或者使用 N1QL 的形式对数据进行操作(N1QL 是非常类似于 SQL 的一种语法操作 JSON 数据的方式)。以现在整体架构来看,Couchbase 是往分布式数据库的方向发展下去。
极光推送 发布于 1年前 阅读 1757 评论 2 点赞 8

postgresql利用pg_upgrade大版本升级(8.4到9.5)

本文利用pg_upgrade实现将8.4.18版本升级到9.5.0版本,8.4.18版本为RedHat系统自带pg数据库版本。
Splace 发布于 1年前 阅读 2439 评论 8 点赞 8

SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用

SQLite是一个开源的嵌入式关系数据库,其小巧简洁快速的特性十分易于应用于移动应用数据管理中。
珲少 发布于 2年前 阅读 5988 评论 6 点赞 8
顶部