网站扩展虚拟空间,运用阿里云怎么做网站,想学网站开发,二手车出口外贸流程一、CockroachDB是什么 CockroachDB#xff08;https://www.cockroachlabs.com#xff09;是Google备受瞩目的Spanner的开源模仿#xff0c;承诺提供一种高存活性、强一致性#xff0c;可横向扩展的SQL数据库。主要的设计目标是全球一致性和可靠性#xff0c;从蟑螂#…一、CockroachDB是什么 CockroachDBhttps://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 \--storehello-1 \--host192.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 --host192.168.118.21cockroach sql --insecure -e CREATE DATABASE test --host192.168.118.21cockroach sql --insecure -e GRANT ALL ON DATABASE test TO testaccount --host192.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(Server192.168.118.21;PORT26257;User IDtestaccount;Passwordtestaccount;Databasetest;Timeout0;Command Timeout0)){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(Server192.168.118.21;PORT26257;User IDtestaccount;Passwordtestaccount;Databasetest;Timeout0;Command Timeout0)){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(Server192.168.118.21;PORT26257;User IDtestaccount;Passwordtestaccount;Databasetest;Timeout0;Command Timeout0){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跨平台或扫描二维码关注