SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作
上一篇通过一系列的操作,终于把SequoiaDB的集群部署到单台机器上了。
建议去安装体验一下吧。
在整个环境的部署的体验来看,并没有MongoDB的部署简单,但是比MongoDB的部署要清晰。MongoDB启动进程,后面跟着一大串配置,有点云里雾里的感觉,这个对初学者不太友好。而SequoiaDB的部署,着眼整个集群环境,能在脑中轻松构建一副设计图,协调节点的服务端口是11810,catalog节点的服务端口是11820,11830,11840,而数据节点的服务端口是11850,11860,11870。有了对整体层次的把握,能更好的理解SequoiaDB的设计和架构。
在集群环境部署好之后,试试简单的CRUD操作。
本篇的内容会很简单,都是一些简单的操作,而且不用了解其背后的原理和流程。噢,对了,需要对 json 结构了解一下,因为这个是数据库记录的基础,每一条记录,其实就是一条json 数据,而存入数据库中的是二进制的 json,也就是bson结构。
github上有一个rapidjson项目,是腾讯的专家 miloyip 由rapidxml获得灵感来实现的,有空不妨看看,项目地址是:rapidjson
确保你的集群环境已经启动了(我在安装时候,设置的是开机自启动),可以用以下操作检测一下你的环境:
打开终端,输入
$ ps -ef | grep seq
如果有sequoiadb的进程,并且进程个数,是你配置的节点(协调节点 + catalog节点 + 数据节点 的总和),那说明集群环境已经启动;另外,还需要检测一下sdbcm服务是否启动,可以用命令 service sdbcm status 或者 ps -ef | grep sdbcm 来检查。
如果没有启动,请切换到sdbadmin用户,再切入到SequoiaDB的安装目录(一般是 /opt/sequoiadb/bin/ 这个目录),执行 ./sdbcmart,稍等一下,这个进程会拉起所有的节点。
说了那么多废话,终于到了干正事的时候了。
切换到普通用户,切入SequoiaDB的执行文件目录,执行 ./sdb进入到shell执行环境。这是一个javascript的解释执行环境,以后就不再提啦。
一、连接数据库协调服务节点
在SequoiaDB的shell解释环境下,输入
> db = new Sdb( "Milky", 11810 )
这个是连接到集群的协调节点。
TIPS:你也可以直接连接到某个节点,只要输入正确的hostname和服务端口号就行,但并不建议这么做。
二、创建数据库(Collection Space,为了便于书写,Collection Space简称“cs”或者“CS”)
连接到协调节点之后,创建一个cs ,这个 cs 就类似于MongoDB的db了。对应于关系型数据库的数据库。
> db.createCS("foo")
如果没有提示错误,就成功创建了名为“foo”的cs。
三、创建数据库表(Collection,为了便于书写,Collection 简称“cl”或者“CL”)
完成第二步的操作之后,再在cs上创建一个 cl。当然,这个 cl 和MongoDB的Collection对应,都是用于存储数据的。对应于关系数据库的表。
> db.foo.createCL("bar")
依然没有提示错误的话,就成功的在名为“foo”的cs上创建了名字为“bar”的cl。
创建cl的时候,还可以指定cl的分区键、分区方式、写副本数等属性。详细请参考SequoiaDB官网信息中心参考手册中关于创建cl的描述。例如:
> db.foo.createCL( "bar", { ReplSize:2, Compressed:true } )
这个就是创建了一个名字为“bar”、写副本数为2且进行数据压缩的Collection。
TIPS:写副本数指的是,当数据库收到写操作时候,至少将数据写入个数据节点之后才返回。
通过以上步骤,相当于在MySQL这类数据库上创建了一个数据库,并创建了一个表。
四、插入数据
现在已经创建了名字为“foo”的cs和名字为“bar”的cl,该往里面插入数据了:
> db.foo.bar.insert( {"Name":"Milky", "Age": 25, "email":"orange@sina.com"} )
这样就插入了一条json数据。
插入多条数据也可以用这个方法:
> db.foo.bar.insert( [{"number":10001}, {"number":10002},{"number":10003},{"number":10004}] )
这样就插入了多条数据。
五、查询(先把查询提前一下)
上面插入了几条数据,现在查询一下:
> db.foo.bar.find()
输出:
{
"_id": {
"$oid": "54aff8ce77c3e8d30d000000"
},
"Name": "Milky",
"Age": 25,
"email": "orange@sina.com"
}
{
"_id": {
"$oid": "54aff8e377c3e8d30d000001"
},
"number": 10001
}
{
"_id": {
"$oid": "54aff8e377c3e8d30d000002"
},
"number": 10002
}
{
"_id": {
"$oid": "54aff8e377c3e8d30d000003"
},
"number": 10003
}
{
"_id": {
"$oid": "54aff8e377c3e8d30d000004"
},
"number": 10004
}
find方法是可以携带其他参数的:查询条件,索引,排序条件,返回记录条数等。例如我们查询number是10003的记录,可以输入:
> db.foo.bar.find({"number":10003})
还有设置查询走索引,设置排序条件的参数,可以参考SequoiaDB官网信息中心。
六、更新数据
现在想在已经插入数据中,将Name是“Milky”的记录的email字段更新为“milky@gmail.com”,输入
> db.foo.bar.update({"$set":{"email":"milky@gmail.com"}}, {"Name":{"$et":"Milky"}})
查看一下是否成功:
> db.foo.bar.find({"Name":"Milky"})
输出:
{
"Age": 25,
"Name": "Milky",
"_id": {
"$oid": "54aff8ce77c3e8d30d000000"
},
"email": "milky@gmail.com"
}
Return 1 row(s).
Takes 0.1444s.
更多匹配字符,请参考SequoiaDB官网信息中心 :)
七、删除数据
插入了数据,有更新了数据,现在要操作一下删除数据了。先删除某一条数据:
> db.foo.bar.remove({"number":10002})
操作成功,find一下是否真的删除了:
> db.foo.bar.find()
输出:
{
"Age": 25,
"Name": "Milky",
"_id": {
"$oid": "54aff8ce77c3e8d30d000000"
},
"email": "milky@gmail.com"
}
{
"_id": {
"$oid": "54aff8e377c3e8d30d000001"
},
"number": 10001
}
{
"_id": {
"$oid": "54aff8e377c3e8d30d000003"
},
"number": 10003
}
{
"_id": {
"$oid": "54aff8e377c3e8d30d000004"
},
"number": 10004
}
从查询结果中,可以看到number为10002的记录已经被干掉了。
发现查询出来的这些数据没有任何意义(像只有number字段的记录),要从数据库中干掉:
> db.foo.bar.remove({"number":{"$exists":""}})
这一句就是删除了所有具有number字段的记录。
TIPS:目前插入的数据中,这个字段很容易和其他字段区分,所以这么做,在真正操作的时候,慎重选择删除所有的数据!
八、其它操作
简单的CRUD操作,还有upsert,这个操作的功能是当数据库中没有某项记录时插入数据,否则更新数据。再此就不再做演示。
除此之外,还有一些高级操作,下一篇我们再叙。
本篇的内容比较简单,只是对数据库做了简单的CRUD操作,下一篇,我们会再讲述几个高级功能,让我摸索一下先 :),敬请关注!
=====>THE END<=====
SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作的更多相关文章
- SequoiaDB 系列之三 :SequoiaDB的高级功能
上一篇简单描述了一下SequoiaDB的简单CRUD操作,本篇将讲述一下稍微高级点的功能. 部署在我机器上的集群环境,在经过创建名字为"foo"的cs,创建名字为"bar ...
- Wix打包系列(二)用户界面和本地化操作
原文:Wix打包系列(二)用户界面和本地化操作 上一章节,我们已经大概知道如何对文件进行打包安装,不过我们也注意到,通过对Sample.wxs的编译链接,生成的msi安装包没有任何用户界面,只有一个安 ...
- SequoiaDB 系列之一 :SequoiaDB的安装、部署
在分析或者参与一个开源项目之前,了解项目构建的目的是有必要的. 既然SequoiaDB是NoSQL数据库产品,则必然存在于传统关系型数据库相同的功能点:数据的增.删.改和查询(CRUD). 先了解怎么 ...
- mybatis学习(二)----对表进行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 userMapper.xml映射文件如下: <?xml version="1.0" encoding=&quo ...
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...
- Docker系列(二)镜像下载、操作容器、镜像导入导出等操作
一.镜像操作 列出镜像 $sudo docker images 从dockerhub检索image $docker search image_name 下载image $docker pull ima ...
- Spring Boot demo系列(二):简单三层架构Web应用
2021.2.24 更新 1 概述 这是Spring Boot的第二个Demo,一个只有三层架构的极简Web应用,持久层使用的是MyBatis. 2 架构 一个最简单的Spring Boot Web应 ...
- Gradle系列之二 Groovy对文件的操作
Groovy对文件的操作 对文件的遍历 假设文件的原始内容为: hello,world 这里是北京 andorid and ios are good system 第一种方法:使用 eachLine( ...
- Spark系列(二) Spark Shell各种操作及详细说明
并行化scala集合(Parallelize) //加载数据1~10 val num=sc.parallelize(1 to 10) //每个数据项乘以2,注意 _*2记为一个函数(fun) val ...
随机推荐
- 最小生成树之Kruskal算法
用Kruskal方法解决无向连通图最小生成树问题: 1所有的点初始化的时候自成一个集合 2所有的边按照权值大小,从小到大排序 3选取权值小的边加入现有集合中,且加入后必须不构成环路,加入后,记录点的祖 ...
- MIT jos 6.828 Fall 2014 训练记录(lab 4)
源代码参见我的github: https://github.com/YaoZengzeng/jos Part A: Multiprocessor Support and Cooperative Mul ...
- testng环境设置
1.在eclipse中安装testng插件,地址:http://beust.com/eclipse 2.设置testng环境变量 testng_home D:\Program Files\eclips ...
- 关键路径 SDUTOJ 2498
SDUTOJ 2498 AOE网上的关键路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 一个无环的有向图称为无环图(Dire ...
- 写一个iOS VoIP应用需要知道什么?
IOS编程--VoIP解密 一般来说, IOS很少给App后台运行的权限. 仅有的方式就是 VoIP. IOS少有的为VoIP应用提供了后台socket连接,定期唤醒并且随开机启动的权限.而这些就是I ...
- 分享一个Fluent风格的邮件发送封装类
C#中用SmtpClient发邮件很简单,闲着无事,简单封装一下 IEmailFactory public interface IEmailFactory { IEmailFactory SetHos ...
- Zookeeper C API 指南一(转)
Zookeeper 监视(Watches) 简介 Zookeeper C API 的声明和描述在 include/zookeeper.h 中可以找到,另外大部分的 Zookeeper C API 常量 ...
- 单元测试---googletest
单元测试概述 测试并不只是测试工程师的责任,对于开发工程师,为了保证发布给测试环节的代码具有足够好的质量( Quality ),为所编写的功能代码编写适量的单元测试是十分必要的. 单元测试( Unit ...
- 二分图最大匹配算法-Hopcroft-Karp模板
时间复杂度:O((√V)*E) #include<stdio.h> #include<string.h> ,M=,INF=0x3f3f3f3f; int dx[N],dy[M] ...
- poj 3352
Road Construction Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11215 Accepted: 5575 De ...