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:写副本数指的是,当数据库收到写操作时候,至少将数据写入2个数据节点之后才返回。

通过以上步骤,相当于在MySQL这类数据库上创建了一个数据库,并创建了一个表。

四、插入数据

现在已经创建了名字为“foo”的cs和名字为“bar”的cl,该往里面插入数据了:

> db.foo.bar.insert( {"Name":"Milky", "Age": 25, "email":"[email protected]"} )

  这样就插入了一条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": "[email protected]"
}
{
"_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字段更新为“[email protected]”,输入

> db.foo.bar.update({"$set":{"email":"[email protected]"}}, {"Name":{"$et":"Milky"}})

  查看一下是否成功:

> db.foo.bar.find({"Name":"Milky"})

  输出:

{
"Age": 25,
"Name": "Milky",
"_id": {
"$oid": "54aff8ce77c3e8d30d000000"
},
"email": "[email protected]"
}
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": "[email protected]"
}
{
"_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,这个操作的功能是当数据库中没有某项记录时插入数据,否则更新数据。再此就不再做演示。

  除此之外,还有createIndex,dropIndex,count,aggregate,split等高级操作,下一篇我们再叙。

本篇的内容比较简单,只是对数据库做了简单的CRUD操作,下一篇,我们会再讲述几个高级功能,让我摸索一下先 :)

=====>THE END<=====

时间: 2024-10-18 05:09:11

SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作的相关文章

SequoiaDB 系列之三 :SequoiaDB的高级功能

上一篇简单描述了一下SequoiaDB的简单CRUD操作,本篇将讲述一下稍微高级点的功能. 部署在我机器上的集群环境,在经过创建名字为"foo"的cs,创建名字为"bar"的cl,以及插入一些数据之后,并没有删除掉,因此在本篇中会继续使用. 首先,我们先看看,在SequoiaDB的安装目录中的database目录里面,有那些文件: ~$ ls /opt/sequoiadb/database/data/11850 我们会发现有几个文件:foo.1.idx,foo.1.

Powershell管理系列(二十六)PowerShell操作之批量导出&导入邮箱

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 项目中有时候做跨林邮箱迁移的时候,条件不成熟,比如安全考虑或者其他考虑,不能做双林信任,这样就提出了一个问题,历史邮件需要使用的话怎么办,一个简单高效的解决办法就是从源森林批量导出邮件为.pst文件,在批量导入到目的域森林,具体操作如下: 1.赋予管理账号邮件导入导出权限,命令如下: cls whoami New-Manageme

SequoiaDB 系列之一 :SequoiaDB的安装、部署

在分析或者参与一个开源项目之前,了解项目构建的目的是有必要的. 既然SequoiaDB是NoSQL数据库产品,则必然存在于传统关系型数据库相同的功能点:数据的增.删.改和查询(CRUD). 先了解怎么用,再在会用的基础上,进一步分析其实现. 在上一篇中已经列出的安装环境,以及SequoiaDB的下载地址. 具备以上条件之后,然后咱就行动吧. 本篇文章的内容是安装和部署一个集群环境(也可以是独立数据节点的环境,看个人的喜好了.独立模式的部署可以去SequoiaDB官网的信息中心获取) 进入终端,切

mybatis学习(二)----对表进行CRUD操作

一.使用MyBatis对表执行CRUD操作--基于XML的实现 userMapper.xml映射文件如下: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g

Hibernate系列(二):简单编写HibernateUtil类来优化性能

相对于Hibernate系列(一)中的代码编写HibernateUtil类以提高程序的运行速度 首先,仍然要写一个javabean(User.java): package cn.itcast.hibernate.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; }

MongoDB的一些简单CRUD操作

上篇博客已经对MongoDB进行了简单介绍和它如何安装,现在来说说MongoDB的操作.MongoDB的操作用的是Shell命令,Shell命令语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的.使用Shell 命令,需要启动mongo.exe. 常用Shell命令如下: 1.创建collection 2.查看创建的collection 3.collection中写入数据 4.查询插入的数据 5.条件查询 6.查询一条数据中的指定列 7.排序 7.

Spark系列(二) Spark Shell各种操作及详细说明

并行化scala集合(Parallelize) //加载数据1~10 val num=sc.parallelize(1 to 10) //每个数据项乘以2,注意 _*2记为一个函数(fun) val doublenum = num.map(_*2) //内存缓存数据 doublenum.cache() //过滤数据,每个数据项 % 3 为0的数据为结果集: val threenum = doublenum.filter(_ % 3 == 0) //释放缓存 threenum.unpersist(

Powershell管理系列(二十五)PowerShell操作之或者AD账号及邮箱信息

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 有时候我们需要查询账号的很多属性,但是需要通过不同的命令去获取,有点类似SQL Server里面的多表连接查询,比如查询所有账号的ad账号描述,邮箱名,显示名,邮箱地址,邮箱数目,邮箱大小,存档邮箱大小,存档邮箱数目. ad账号描述---对应AD账号的描述信息,通过Get-adUser 获取 邮箱名,显示名,邮箱地址---对应用户

Powershell管理系列(二十四)PowerShell操作之批量启用Exchange用户头像

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 由于组织机构比较大,分支机构的员工可能都不能相互认识,可以在GAL中除了显示联系人信息还可以显示他的照片.在Exchange server 2013里面导入图片有两种方式,一种是使用Import-RecipientDataProperty,但是对图片大小有限制,图片必须是 JPEG 格式的文件,且不得大于 10 KB:第二种是使用