C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)
阅读目录
一、背景
在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html)的过程中,发现如果从常规的RDBMS迁移过去几乎是不太可能的事情,所以掉头开始调研一下也是这2年比较火的一个NewSQL,而且是我们国人做的产品,火爆程度甚不亚于CockroachDB —— TiDB。
二、TiDB是什么
TiDB(https://www.pingcap.com/index-zh)也是受Google Spanner / F1 论文的启发, 实现了自动的水平伸缩,强一致性的分布式事务,基于 Raft 算法的多副本复制等重要 NewSQL 特性。 从对外提供的功能上它与CockroachDB是类似的,其中最大的区别在它完全兼容MySQL协议,支持包括跨行事务,JOIN 及子查询在内的绝大多数 MySQL 的语法(看着就用起来很爽的样子)。
三、环境部署
官方文档(https://www.pingcap.com/docs-cn)写的非常详细,按照做就好了。笔者在CentOS上直接使用Binary的方式进行的部署。然后使用任意一个可以连接Mysql的客户端连上去即可。默认端口是4000,有一个内置的“test”数据库。使用root账户,默认无需密码即可连上。笔者使用DBeaver进行连接,如下图1:

四、实战
和上一篇一样,我们现在在直接在test数据库下创建好待测试的表,然后在Nuget上引用Oracle发布的MySql官方DLL,直接就可以测试了,和MySql用法一模一样,代码如下:
using (var conn = new MySqlConnection(connectionString))
{
using (var cmd = conn.CreateCommand())
{
cmd.Connection = conn;
cmd.CommandText = "SELECT id, balance FROM accounts";
cmd.CommandType = CommandType.Text; using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(@" reader[id] is {0}", reader["id"]);
Console.WriteLine(@" reader[balance] is {0}", reader["balance"]);
}
}
}
}
五、性能测试
好了测试环境和上篇一样,客户端机器是 4核 i5-4300U,数据库所在的机器是 8核 Xeon(R) E5630。结果里包含了上篇的测试结果以作参考。其中增加了对Join的测试,结果见下图1(点击可查看大图)。

特别注意的是,分布式数据库对资源的消耗是单体数据库的好几个量级,其中CockroachDB和TiDB跑不上去都是因为CPU跑满了。但是值得注意的是,其中TiDB的综合结果比Cockroach更好(除了在长连接+少数据量的情况下)。由于硬件资源不够本次未做分布式模式下的性能,这个我会在接下去进一步进行测试,主要是为了验证在CPU未达到瓶颈的情况下,与传统单体关系型数据库的性能差异,敬请期待~
六、结语
算是将对标Google Spanner / F1 的2个数据都体验了一把,欣喜的是,我们国人做的TiDB目前的功能和质量上都胜过CockroachDB一筹,还是很值得期待的。另外今年6月刚获得B轮融资,希望越做越好吧~
作者:Zachary
出处:https://zacharyfan.com/archives/246.html
▶关于作者:张帆(Zachary,个人微信号:Zachary-ZF)。坚持用心打磨每一篇高质量原创。欢迎扫描右侧的二维码~。
定期发表原创内容:架构设计丨分布式系统丨产品丨运营丨一些思考。
如果你是初级程序员,想提升但不知道如何下手。又或者做程序员多年,陷入了一些瓶颈想拓宽一下视野。欢迎关注我的公众号「跨界架构师」,回复「技术」,送你一份我长期收集和整理的思维导图。
如果你是运营,面对不断变化的市场束手无策。又或者想了解主流的运营策略,以丰富自己的“仓库”。欢迎关注我的公众号「跨界架构师」,回复「运营」,送你一份我长期收集和整理的思维导图。
C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)的更多相关文章
- C#和NewSQL更配 —— CockroachDB入门(可能是C#下的全网首发)
阅读目录 CockroachDB是什么 环境部署 实战 性能测试 结语 一.CockroachDB是什么 CockroachDB(https://www.cockroachlabs.com)是Goog ...
- TiDB入门(四):从入门到“跑路”
前言 前面三章基本把 TiDB 的环境弄好了,也做了一下简单测试,有兴趣的同学可以看一下: TiDB 入门(一):TiDB 简介 TiDB 入门(二):虚拟机搭建 TiDB-Ansible 部署方案 ...
- Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE
Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE Windows平台下安装Arduino IDE Windows操作系统下可以使用安装向导和压缩包形式安装.下面详细讲解这 ...
- vue 快速入门 系列 —— vue loader 下
其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...
- JavaWeb入门——在Linux环境下安装Tomcat服务器
JavaWeb入门——在Linux环境下安装Tomcat服务器 摘要:本文主要学习了如何在Linux环境下安装Tomcat服务器. 准备工作 检查Java环境变量 检查系统是否配置了Java的环境变量 ...
- JavaWeb入门——在Windows环境下安装Tomcat服务器
JavaWeb入门——在Windows环境下安装Tomcat服务器 摘要:本文主要学习如何在Windows环境中下载并安装Tomcat服务器. 下载 获取安装包 推荐去官网上下载Tomcat: htt ...
- Java入门——在Linux环境下安装JDK并配置环境变量
Java入门——在Linux环境下安装JDK并配置环境变量 摘要:本文主要说明在Linux环境下JDK的安装,以及安装完成之后环境变量的配置. 使用已下载的压缩包进行安装 下载并解压 在Java的官网 ...
- NewSQL和TiDB入门
TiDB已经在项目中使用,从了解来看,它主要解决的是分布式事务的问题,而我们实际使用场景,却是大数据量下不需要关注分表: 最近实在忙加懒,一直没时间看TiDB的原理.今天看了下PingCAP3篇入门介 ...
- tidb入门
由于目前的项目把mysql换成了TiDb,所以特意来了解下tidb.其实也不能说换,由于tidb和mysql几乎完全兼容,所以我们的程序没有任何改动就完成了数据库从mysql到TiDb的转换,TiDB ...
随机推荐
- C++学习(五)入门篇——基本类型
面向对象编程的本质是设计并扩展自己的数据类型,让类型和数据匹配. 内置C++分成两种类型:基本类型和复合类型 1.简单变量 程序需要存储信息时,必须记录三个基本属性 (1)信息将存储在哪 (2)要存储 ...
- nopCommerce 3.9 大波浪系列 之 IWebHelper
接口:Nop.Core.IWebHelper 实现:Nop.Core.WebHelper 测试:Nop.Core.Tests.WebHelperTests 简介:Web辅助类 功能:获取客户端IP地址 ...
- Spring初学
一.spring体系结构spring核心组件 1.Beans(包装应用程序自定义对象Object,Object中存有数据) 2.Core (资源加载,资源抽象,建立维护与bean之间的一些关系所需的一 ...
- IDEA+Java:Selenium+Maven+TestNG基本WebUI自动化测试环境搭建
IDEA+java:Selenium+Maven+TestNG 本文介绍的测试环境,应该是最基本的测试环境了,也是很多文章都有写,这里做一个完整的图文配置整理,方便阅读理解! 使用maven的好处,由 ...
- python爬虫从入门到放弃(一)之初识爬虫
整理这个文档的初衷是自己开始学习的时候没有找到好的教程和文本资料,自己整理一份这样的资料希望能对小伙伴有帮助 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页 ...
- struts2.0的工作原理?
struts2并不是一个陌生的web框架,它是以Webwork的设计思想为核心,吸收struts1的优点,可以说 struts2是struts1和Webwork结合的产物. struts2 的工作原理 ...
- Ant Design UI组件
Ant Design 是面向中台的 UI 设计语言. http://ant.design/
- ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存
一.Redis是什么? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset ...
- IntelliJ idea学习资源
工作需要, 最近得从Eclipse转战到Idea, 找了些不错的学习资料: 1, 从eclipse上迁移过来的用户说明: https://www.jetbrains.com/help/idea/201 ...
- 如何发布自己的开源框架到CocoaPods【转】
在开发过程中,经常会使用到第三框架,我们通过一个pod install命令,很方便的就将第三方框架加到我们自己的项目中. 如果我们也想将自己写的组件或库开源出去,让别人也可以通过pod install ...