一、CockroachDB是什么

  CockroachDB(https://www.cockroachlabs.com)是Google备受瞩目的Spanner的开源模仿,承诺提供一种高存活性、强一致性,可横向扩展的SQL数据库。主要的设计目标是全球一致性和可靠性,从蟑螂(cockroach)的命名上是就能看出这点 [ 打不死的小强:) ]。Cockroach节点是均衡的,其设计目标是同质部署(只有一个二进制包)且最小配置。CockroachDB的扩展非常容易,只要一行命令,秒级进行。

二、环境部署

  官方文档写的非常详细,按照做就好了。部署的文档(https://www.cockroachlabs.com/docs/stable/install-cockroachdb.html),笔者在CentOS上直接使用Binary的方式进行的部署。

  安装完之后开始启动CockroachDB了,启动命令参考文档(https://www.cockroachlabs.com/docs/stable/start-a-node.html)。

  

cockroach start --insecure \--store=hello-1 \--host=192.168.118.21

  

  解释下这行命令:启动一个CockroachDB的节点,存储位置为安装所在目录下的hello-1,并且使用192.168.118.21进行host,如果需要还可以指定管理站点的端口和数据库对外端口,对应的参数为 --port = 26257(默认值)、--http-port = 8080(默认值)

  OK,启动完之后可以在浏览器输入host中指定的IP:端口进入到管理站点,界面如下图1:

                           【图1】

三、实战

  在真正的使用C#代码调用之前首先先创建一个账户,使用cockroach user 命令。需要注意的是,如果之前在启动节点时指定了ip和端口,那么同样需要进行指定。同样的,再创建一个数据库并且给创建的账户设置权限。代码如下:

cockroach user set testaccount --insecure --host=192.168.118.21cockroach sql --insecure -e 'CREATE DATABASE test' --host=192.168.118.21cockroach sql --insecure -e 'GRANT ALL ON DATABASE test TO testaccount'  --host=192.168.118.21

  其实在安装完CockroachDB之后会自带SQL Client,在这个上面可以运行所有的SQL语句。当然我们这里暂时不讨论这个,有兴趣的小伙伴可以转到(https://www.cockroachlabs.com/docs/stable/use-the-built-in-sql-client.html)。

  由于CockroachDB支持PostgreSQL的协议,所以我们可以使用C#下比较热门的PostgreSQL驱动,下载地址:https://github.com/npgsql/npgsql 。我们需要使用的其实就是其中的npgsql项目编译出来的dll。好了,开始创建一个表并初始化2条数据:

  using (var conn = new NpgsqlConnection("Server=192.168.118.21;PORT=26257;User ID=testaccount;Password=testaccount;Database=test;Timeout=0;Command Timeout=0")){conn.Open();conn.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS accounts (id INT PRIMARY KEY, balance INT)");                using (var cmd = new NpgsqlCommand("INSERT INTO accounts (id, balance) VALUES (1, 1000), (2, 250)",conn)){cmd.ExecuteNonQuery();}}

  可以看到建表的语句所支持的语法和SQL SERVER还是有一些差别的,可以直接在CREATE TABLE 后面跟判断表是否存在。好了,执行完可以点击管理站点左上角的“DATABASES”选项卡,就可以看到下面的数据库(test)和表(accounts)了,图2:

                            【图2】

  好,我们来尝试着读取的一下数据:

  using (var conn = new NpgsqlConnection("Server=192.168.118.21;PORT=26257;User ID=testaccount;Password=testaccount;Database=test;Timeout=0;Command Timeout=0")){conn.Open();                   using (var cmd = new NpgsqlCommand("SELECT id, balance FROM accounts", conn)){                  using (var reader = cmd.ExecuteReader(Behavior)){                                                  while (reader.Read()){ Console.WriteLine(@" reader[id] is {0}", reader["id"]);Console.WriteLine(@" reader[balance] is {0}", reader["balance"]);}}}}

  这里需要注意一点的是。npgsql如果使用连接字符串的方式来初始化连接,那么其默认的连接模式为连接池模式。在此模式下,一但创建的NpgsqlConnection被Dispose()一次之后,后续哪怕再继续实例化一个新的NpgsqlConnection也会报错。如果要使用这种短链接的方式,需要使用NpgsqlConnectionStringBuilder来进行连接的实例化,并且指定 Pooling = true ,如下。

  var connString = new NpgsqlConnectionStringBuilder("Server=192.168.118.21;PORT=26257;User ID=testaccount;Password=testaccount;Database=test;Timeout=0;Command Timeout=0"){Pooling = true}.ToString(); using (var conn = new NpgsqlConnection(connString))

四、性能测试

  测试客户端机器是 4核 i5-4300U,数据库所在的机器是 8核 Xeon(R) E5630。为了做一个相应的对比,我在CockroachDB所在的机器装了SQL Server 2017 on Lunix、另外也用了装在同等配置下的windows服务器上的SQL SERVER2008进行对比。见图3(点击图片可查看大图):

                               【图3】

  大家可以着重看数据库响应时间那列,这里的时间是纯的数据库响应+2次网络I/O的时间,减少数据库访问SDK对结果的影响。但是很明显从”线程时间列“中看出nqgsql中对连接的开销比.net framework中的sqlconnection还是大了2个数量级,所以我们在运用的时候需要考虑封装一层连接池来实现。

  测试结果得出的结论是:CockroachDB在长连接模式下的性能是SQL SERVER的3倍以上,其它场景完全没法用,所以如果要运用CockroachDB还是要围绕这个模式去做。另外SQL SERVER在自家Windows和Lunix上还是有些小差异的,都使用默认设置,性能上高出几个百分点,当然SQL SERVER的版本不同可能也会带来一些影响,这里没有继续深入测试,结果仅供参考。

五、结语

  再做上面的一系列工作中,也对CockroachDB的一些信息做了更深入的了解。其目前主要还是围绕着开头说的”可伸缩、跨地域(全球)复制且兼容事务的 ACID 特性的分布式数据库“来做,并不适用于复杂Join或者OLAP型需求的场景。不过其还很年轻,目前只有3岁,从github上的热度来看,其未来的发展还是前途一篇光明的,并且谷歌在Go语言上的投入对CockroachDB的受益是直接的,所以保持持续的关注。

  另外如果各位的确有跨机房多数据中心的需求,并且几个机房的位置离的不远,能够对NTP(如果对CockroachDB的基于NTP的实现HLC感兴趣,可以转到这篇文章:http://www.jianshu.com/p/8500882ab38c)的时钟误差控制在一定可以接受的范围内,我认为还是值得一试的。毕竟动态扩容和rebalance真的是你手指动动秒秒钟的事情,运维成本非常低。

相关文章:

  • Cockroach DB 1.0发布

  • 详解CockroachDB事务处理系统

原文地址:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

C#和NewSQL更配 —— CockroachDB入门相关推荐

  1. C#和NewSQL更配 —— TiDB入门

    一.背景 在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html)的过程中,发 ...

  2. 听说Attention与Softmax更配哦~

    ©PaperWeekly 原创 · 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP.神经网络 不知道大家留意到一个细节没有,就是当前 NLP 主流的预训练模式都是在一个固定长度(比如 51 ...

  3. p8刷原生android,【EMUI3.1全局】原生Android M + IOS 7完美结合,听说跟P8更配哦

    下载主题放到Hwthemes文件夹内,打开[主题]--[我的]即可看到主题,应用即可. 无论是安卓M还是苹果IOS风格的主题,一直都备受追捧. 今天楼主给大家推荐一款别样的主题,原生Android M ...

  4. 炒股配资入门有哪些基础知识?

    炒股配资入门有哪些基础知识?盘前查跟大家讲一下,如下: 第一,开户要想投资股票,首先你要有一个股票账户,股票账户的开户就要去找券商,选择一个好券商也是很重要的.市场上可选择的券商有很多,关键还是看佣金 ...

  5. OSChina 周四乱弹 —— 听说圣诞节和单身狗更配哦

    2019独角兽企业重金招聘Python工程师标准>>> 周四,剩单快乐! 周三又是个不寻常的日子,西方节日总是充斥着各种故事 昨天由@叶秀兰  童鞋引发了众多 OSCer 对@红薯 ...

  6. OPEN(SAP) UI5 学习入门系列之四:更好的入门系列-官方Walkthrough

    好久没有更新了,实在不知道应该写一些什么内容,因为作为入门系列,实际上应该更多的是操作而不是理论,而在UI5 SDK中的EXPLORER里面有着各种控件的用法,所以在这里也没有必要再来一遍,还是看官方 ...

  7. python和vb基础哪个简单_python和VB哪个更容易学习入门呢?

    当然是Python,Python是最接近人类语言的编程语言,但是想对编程更理解,c语言是必须学的 没法说哪个好或者哪个不好.各有优缺点.python在网络上应用的很多,而VB主要应用在桌面应用上.主要 ...

  8. 戴上更专业的入门有线耳机,享受更悦耳的音符,KZ-ZVX上手

    现在大家给手机配耳机的时候,蓝牙耳机应该都是首选,百元左右也能找到不少选择,不过就实际体验和音质表现来说,有线耳机还是用起来更有感觉,听歌更舒服一些. 最近我在用一款百元价位的有线耳机,叫做KZ-ZV ...

  9. Windows CockroachDB入门上手

    关于CockroachDB可以查看下面三个博客 开源数据库CockroachDB(一) 开源数据库CockroachDB(二) 开源数据库CockroachDB(三) 一.下载 下载地址:https: ...

最新文章

  1. 压力测试工具ab 及 centos下单独安装方法
  2. 基于LVS-DR集群的持久链接实验
  3. Linux 文件系统错误的修复方法 ddrescue替代dd的恢复软件 备用超级块
  4. springboot整合shiro地址栏JSESSIONID问题
  5. 使用Grunt构建任务管理脚本(转)
  6. Django Bootstrap开发笔记01 - 添加简单网页
  7. Java 并发编程之线程池 ExecutorService 接口
  8. 教学计划计算机,计算机教学计划模板
  9. servlet ehcache beanfactroy c3p0 配置文件
  10. JAVA设计模式-适配器模式(Adapter)
  11. 通过模板设计按钮样式
  12. 检验多重共线性matlab_异方差太难?检验通不过?横截面分析难题的十大暴击!...
  13. 前端-chromeF12 谷歌开发者工具详解 Network篇
  14. DE22 Using Laplace Transform to Solve ODEs with Discontinuous Inputs
  15. AndroidStudio快捷键大全
  16. Lecture 7:策略梯度
  17. macfee怎么生成释放代码_批处理应用:使用FLASHGET检查Mcafee SuperDat更新
  18. MPU9250传感器
  19. Chrome浏览器安装失败
  20. win10计算机屏幕暗怎么办,win10屏幕调到最亮还是很暗怎么办

热门文章

  1. 避免活跃性危险(第十章)
  2. 书生云王东临:真正的超融合产品要像“机器猫” 开箱即用
  3. 社交背水一战?校园日记背后,支付宝野心你真能懂?
  4. 成不了天才,但为何也没成人材?(转)
  5. 试着翻译24小时自学SQL第四版
  6. 更轻易地实现 Jwt Token
  7. Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务
  8. MySQL从原理到实践,一篇从头到尾讲清楚
  9. 【DotNetMLLearn】.NET Core人工智能系列-概述
  10. 小米开招.NET,20~40k*16薪,点名要求WPF+自动化!