Sequoiadb精简学习笔记
-
硬件要求:磁盘10G,建议100G,内存1G,建议2G,至少一张网卡
-
操作系统要求:RedHat6,ubuntu12,CentOS6,SUSE11以上
-
修改主机的hostname
- SUSE修改文件$ vi /etc/HOSTNAME
- RedHat7以下,$ vi /etc/sysconfig/network
- RedHat7修改/etc/hostname,HOSTNAME = SERVERNAME
- ubuntu修改文件$ vi /etc/hostname
-
网络映射:$ vi /etc/hosts
-
通过ping来进行验证网络映射是否生效
-
关闭防火墙
-
SUSE的操作
- SuSEfirewall2 stop
- chkconfig SuSEfirewall2_init off
- chkconfig SuSEfirewall2_setup off
-
RedHat的操作
-
service iptables stop
-
chkconfig iptables off
-
Ubuntu的操作
- ufw disable
-
-
验证方法:
- SUSE:$ chkconfig -list | grep fire
- RedHat:$ service iptables status
- Ubuntu:$ ufw status
-
linux推荐配置:
- 配置/etc/security/limits.conf ----数据库的基本性能配置
- 配置 /etc/security/limits.d/90-nproc.conf ----线程的最大数目
- 配置/etc/sysctl.conf -------调整linux内核参数,配置好使用$ /sbin/sysctl -p使配置文件生效
-
关闭transparent_hugepage
- 编辑/etc/rc.local,在第一行 “#!/bin/sh” 的下一行添加如下两行内容
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
- 执行如下命令,使配置生效:
$ source /etc/rc.local
- 检查是否成功关闭transparent_hugepage。分别执行如下两条命令,输出结果中都有 “[never]” 则表示成功关闭了transparent_hugepage,如果是 “never” 并且有 “[always]” 或者 “[madvise]” 则关闭失败:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
$ cat /sys/kernel/mm/transparent_hugepage/defrag
-
关闭NAMA
-
命令行安装过程
- hostname配置
- hostname和ip的地址映射
- 关闭防火墙
- 使用root用户安装
- 在每一台物理机上都手动安装一次
-
安装链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432191002-edition_id-0
-
节点的启停操作
-
sdb启动与停止
- 在root权限下:service sdbcm start|stop(会将所有节点启停)ps:restart只会启动cm节点
- 在sdb安装的bin目录上可以使用sdblist -h(help)查看返回当前节点
- sdbstop -p 端口 可以指定某端口停止
- sdbstart -p 端口 可以指定端口启动
- sdbstop 能停止除om和cm节点以外的所有节点
- sdbstop -t all 能停止cm节点以外的节点
- sdbstop -t db/om/all 默认是all
- sdbstop -r coord/data/coord/catalog/om
- sdbcmtop 停止集群管理节点
- sdbcmart 启动集群管理节点
-
集群启动:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190661-edition_id-0
-
集群停止:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190662-edition_id-0
-
-
命令行操作(curd)
-
在sdb的shell环境下curd操作都是需要先获取到集合空间和集合才能进行操作
事例:
var db = new Sdb(“localhost”,11810);//协调节点
db.createCS(“foo”);
db.foo.createCL(“bar”); -
插入操作
db.foo.bar.insert({ _id: 1,name:{fist:“Jhon”,last:“Black”}, phone:[1853742000,1802321000]})
如果不包含_id那么sdb会生成一个添加一个_id字段并且生成一个唯一的$oid值
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190609-edition_id-0 -
更新操作
db.foo.bar.update({KaTeX parse error: Expected 'EOF', got '}' at position 26: ….first":"Mike"}}̲,{_id:1})//set
db.foo.bar.update({KaTeX parse error: Expected 'EOF', got '}' at position 16: unset:{ age:""}}̲)//unset,删除这个字段
db.foo.bar.update({$inc:{“arr.1”:5}})//数组的便利
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190611-edition_id-0
update和upsert的区别就是如果修改的记录不存在update就不做修改,而upsert会进行 插入
-
删除操作
db.foo.bar.remove()//删除集合中的所有记录
db.foo.bar.remove({name:“Tom”})//删除集合中name是Tom的信息
db.foo.bar.remove({name:“Tom”},{"":“testIndex”})//通过索引遍历删除testIndex是索引名称 -
查询操作(find返回的是游标类型的对象)
db.foo.bar.find()//返回所有记录
db.foo.bar.find({age:23})//查询匹配的年龄(还可以使用条件符)
db.foo.bar.find({“family”:{$elemMatch:{“Dad”:“Kobe”,“phone”:139123456}}})//嵌套对象查询
db.foo.bar.find().sort({age:-1})//还可以对结果排序
db.foo.bar.find().hint( { “”: “testIndex” } )//走索引进行查找
db.foo.bar.find().limit(3)//限制行数
db.foo.bar.find().skip(n)//跳过n行,从n+1行开始返回
查询后的游标 db.foo.bar.find().current()//返回当前游标指向的记录 db.foo.bar.find().next()//返回当前游标指向的下一条记录 db.foo.bar.find().close()//关闭当前游标,当前游标不再可用 db.foo.bar.find().count()//返回当前游标的记录总数 db.foo.bar.find().size()//返回当前游标到最终游标的距离 db.foo.bar.find().toArray()//以数组形式返回结果集 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190610-edition_id-0
-
-
水平切分以及数据域
-
生成数据域db.createDomain()
链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190774-edition_id-0 -
为数据域添加分组domain.addGroups()
链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1524019940-edition_id-0 -
创建数据组db.createRG()
链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190776-edition_id-0 -
通过上面RG创建节点并启动RG.createNode().start()
创建链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190867-edition_id-0
启动链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190875-edition_id-0 -
链接
-
切分 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1454575727-edition_id-0
-
split链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190844-edition_id-0
-
主子表创建
- 创建主表
- 创建子表
- 建立联系main.attachCL(‘foo.bar1’,xxxx,xxxx)
- 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1454575727-edition_id-0
-
二维切分
- 主子表按照范围range切分,集合层面切分
- 数据域管理分区组对主子表集合进行hash切分
-
Lob使用
-
LOB(大对象)
存储格式是二进制,通过分片存储。适合大多数的并发场景
操作
SdbCollection.putLob() //上传一个Lob记录(应该会返回一个唯一的id)
SdbCollection.getLob() //通过唯一id来获取Lob
SdbCollection.deleteLob() //通过id删除Lob
SdbCollection.listLobs() //列出集合中的Lob
例子
db.foo.bar.getLob( ‘5435e7b69487faa663000897’, ‘/opt/mylob’ );
bson最大记录是16M,大对象存在的意义就是为了突破空间限制 -
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190630-edition_id-0
-
-
索引介绍
-
一个索引建立在一个集合上面,一个集合最多有64个索引
-
sdb索引结构是基于B树
-
在 SequoiaDB 中,所有集合均包含一个名为“ shard”索引,索引键为用户指定的分区键字段。
-
索引格式
-
索引链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190613-edition_id-0
-
全文索引
…
连接http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1519293420-edition_id-0
-
-
事务功能
-
sdb事务使用
-
sdb事务默认是关闭的,
-
如要打开事务功能需要在节点的配置文件中配置参数:transactionon = TRUE;在创建数据节点时,增加JSON 类型的参数:{ “transactionon”: “YES” } 或 { “transactionon”: true }。
-
要打开事务功能,必须将logfilenum设置为大于等于5的值(如果未单独配置,其默认为20,则不需要修改)
-
db.transBegin() //事务开启 db.transCommit();//事务提交 db.transRollback(); //事务回滚
-
并发开启事务锁定集合,会发生用户等待默认是等待一分钟,超过就报超时等待
-
事务开启是需要到将每一台的主机的数据节点的配置文件(conf/local/11830/sdb.conf)中将transactionon设置为true。
-
-
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190590-edition_id-0
-
-
数据导出
-
sdbexprt
将sdb数据导出以JSON或CSV的存储格式,支持将一个集合导出到一个文件,也支持将多个集合批量导出到指定集合目录下。 -
JSON
JSON 导出格式中的 JSON 记录符合 JSON 的定义,以左右花括号作为 JSON 记录的分界符,并且字符串类型的数据必须包含在两个双引号之间,转义字符为反斜杠“\”。默认情况下(SequoiaDB的)记录以换行符分隔。用户能够指定记录分隔符。 -
CSV
CSV(Comma Separated Value)导出格式以逗号分隔数值。默认情况下记录以换行符分隔,字段以逗号分隔。用户能够指定字符串分隔符、字段分隔符以及记录分隔符。 -
转意分割符
分隔符可以使用 ASCII 码中的不可见字符,通过转义字符“\”输入 ASCII 码的十进制数值(0 ~ 127),例如“\30”。回车符、换行符、制表符、转义字符“\”可以直接使用“\r”,“\n”,“\t”,“\”。
可以使用 UTF-8 字符作为分隔符。
可以使用多个字符作为分隔符。 -
示例代码
$ sdbexprt -s localhost -p 11810 --type csv --file foo.bar.csv --fields field1,fieldNotExist,field3 -c foo -l bar
-
使用参数
记录分割符号参数-r或–delrecord,字符分隔符-a或–delchar,字段分割符是-e或–delfield,-s或者是–hostname表示为主机名,-p或–svcname表示端口号名 -
注意事项
- 导出工具支持单集合导出和多集合批量导出, 单集合选项 只能用于导出一个集合,但具有更灵活的导出条件选项,如过滤、排序。
- 导出多集合到 csv 格式时,必须使用 --fields 选项对每一个集合指定字段,工具提供的 --genconf 选项将每一个集合的第一行记录的字段导出到配置文件中的 --fields 选项,可以比较方便地编辑每一个集合的字段。
- –genconf 选项将当前命令行的选项写入到配置文件中,下次使用 --conf 选项指定配置文件执行即可,这提供一种多次执行相似命令的便捷方式,另外这种方式主要用于在多集合导出 csv 情况下,对每一个集合生成对应的 --fields 选项。
- 导出单集合时,–select 具有和 --fields 选项一样的作用,但 --select 选项更加灵活。
- 当不指定导出任何集合或者集合空间,即 -c、-l、–cscl 都不指定,则导出数据库中所有的集合。
- 当使用配置文件的选项和命令行选项一样时,优先选择命令行值。
-
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1479195621-edition_id-0
-
-
数据导入
-
导入的分割符
-
CSV不支持的自动类型的识别
在不指定 CSV 字段类型时,导入工具会自动判断类型。其中 oid、date、timestamp、binary、regex 不支持自动类型判断,会被识别为 string 类型。整数超过 long 的范围,浮点数超过 double 的范围,以及浮点数总位数超过 15 位或小数位超过 6 位时,类型判断为 decimal。 -
使用建议
-
json结构导入不关心数据类型,不关心表结构,csv关系表结构不关心数据类型
-
导入日志的作用,帮助使用者了解导入程序运行到什么阶段,帮助使用者定位导
入失败的原因 -
导入文件第一行是表结构,那么默认情况下导入程序会将第一行当作正常数据处理可以使用–headerline参数忽略第一行
-
导入失败的数据和解析失败的数据会记录在当前执行目录的Rec文件中
-
如果导入内容和表结构数据类型不相符,如果支持数据转换,则进行数据转换后导入
-
将一个文件夹或者文件导入到sdb那么路径是通过–file参数写入的
-
提高导入工具的性能,多线程,连接上更多的coord节点,调整导入工具的批数据写
入大小 -
导入工具修改记录分隔符参数–delrecord,-r
-
导入gong修改字段分隔符参数----delfield,-e
-
导入工具的字符集是utf-8中文也是支持这个
-
如果导入要忽略第二列字段就在字段旁加上skip
–fields "fid=“field1,field2 skip,field3” -
件希望增加一个字段
–fields “name,id,log default ‘abc’’” --extra true
-
-
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1479195620-edition_id-0
-
-
聚集功能
-
使用数据聚集的方式
在字段前加上"$",第一组就是做groupby,第二组就是sort,第三组是选择输出的字段 -
聚集功能格式
db.foo.bar.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"id"},sumNum:{ sum"}})
db.foo.bar.aggregate({“KaTeX parse error: Expected '}', got 'EOF' at end of input: group":{"_id":"id”,“log”: {“ sum”}}})
就是加上“”也行 -
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190614-edition_id-0
-
-
数据组一致性校验
-
数据一致性检验,可以使用snapshot(6)进行快照查看
-
使用new Sdb连接上数据节点再使用snapshot(6)会出现很多信息,IsPrimary表示当前节点是否是主节点
-
参数CurrentLSN表示当前数据节点在当前存储的数据位移情况,通过位移情况查看当前节点数据是否一致
-
sdb数据一致性工具是可以进行检查的
-
还可以通过sdb.snapshot(4,{Name:“xxx.xxx”})进行简单的一致性检查
-
一致性工具链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190657-edition_id-300
-
-
shell开发(调用js文件)
-
-s直接在shell执行命令(会生成管道进程)
-
-e写入参数
-
-f就是路径文件
-
执行过程:将-e参数写入temp.js头,将js文件都>>重定向到一个temp.js文件
-
-s参数回生成一个管道进程,用来将js脚本发送给sdb的js引擎,这个管道进程叫做sdbbp,长 时间不用会自动退出进程,也可以通过kill -15直接杀死,管道进程会在当前目录下生成一个管道日志文件,sdbbp.log
-
-
特殊数据类型
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1519612299-edition_id-0
-
单个节点数据库卸载
-
sdb的卸载
-
在cat /etc/default/squoiadb可以查看到基本信息
-
然后通过sdbstop -t all 与 sdbcmtop停止所有sdb的节点
-
通过sdblist -t all -l -m local查看节点路径以及数据保存地点
-
然后删掉数据节点,rm -rf /sequoiadb/database
-
之后就可以使用./uninstall进行卸载 --mode unattended不显示删除进度第五步的卸载是不会把自己新建的文件夹删除(包含许多配置文件)
-
实在是想完全删除整个就将整个文件夹删除
-
最后是通过userdel sdbadmin将这个用户给删除
-
在tmp目录下也需要将sequoiadb目录删掉(保存临时文件用的)
-
集群安装部署
-
sdb基于命令行的集群部署(基于ubuntu)
-
修改/etc/hostname将各个主机ip和主机名映射关系配置好
-
需要在部署的机器上都下载run包
-
全部选择默认安装
-
以后的各种数据节点挂载都是在/opt/sequoiadb/database下如果需要修改挂载到/sequoiadb/database下,需要将sdbadmin授予权限chown sdbadmin:adbadmin_group -R /sequoiadb/database/
-
然后切换到sdbadmin目录下使用touch验证是否能生成文件
-
接着就是运行创建一个临时协调节点
-
通过协调节点创建一个编目节点组并启动
-
通过协调节点创建数据节点组并启动
-
通过协调节点创建一个协调节点组并启动
-
删除临时协调节点,链接cm,var oma = new Oma(‘localhost’,11790)
使用oma.removeCoord(18800)删除临时节点
ps:每一个节点都会占有端口偏移的4位,例如编目节点11800会占用11801-11803所以每一个节点都得省出五个偏移量
2.链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432191002-edition_id-0
-
-
对接PostgreSQL
-
sdb连接PostgreSQL(PostgreSQL版本需要9.3.4以上)
-
下载PostgreSQL源码包,解压。
-
需要外库
sudo apt-get install libreadline6-dev
sudo apt-get install zlib1g-dev
… -
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190586-edition_id-300
-
-
物理机IP发生变化的解决方法
- 如果存在OM界面的,可以直接在界面上更新。
- 如果在shell上,那就只能修改所有的配置链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1483944503-edition_id-300
-
就是在创建PSsql的server时候进行事务功能开启
-
如果sdb要使用事务功能,就需要提前为数据库节点开启事务功能
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190716-edition_id-300
-
存储过程
创建存储过程
db.createProcedure(function test(x,y){return x+y;})
db.removeProcedure(‘procedurename’)
db.list(8)可以查看存储过程
一般的存储过程都是通过在linuxshell上面写js文件,然后交给sdb -f test.js生成,因为在
sdbshell上面不能换行
还有-s参数是用来进行管道写入的,-e是参数写入
-
审计日志
-
审计日志主要作用就是记录连接后操作的日志。可以在节点配置文件conf/local/11910/sdb.conf中设置日志的写入级别,修改后重启节点即可
-
审计日志的文件路径是在/opt/sequoiadb/database/coord/11810/diaglog
-
事务日志都是节点级别的日志,在createNode上可以指定日志的配置
–auditpath制定审计日志存放目录
–auditmask指定审计日志的级别
–diagnum诊断日志的最大文件数量
可以通过直接在配置文件上配置参数----/conf/local/11910/sdb.conf
某个节点的日志一般是记录被链接后对节点的操作。所以操作数据库集群一般是
只需要操作协调节点coord在协调节点上打开审计日志即可 -
审计日志的功能,记录数据库执行的操作命令,帮助dba定位问题
审计日志能够审计的内容
bson记录的增删改查,LOB的创建但是内容不会保存,LOB的删除记录
审计日志是节点级别的 -
具体参数链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190643-edition_id-0
-
-
Java开发
java驱动API:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190737-edition_id-0
-
集群在线版本升级
- 升级说明
- 只能支持向后兼容,同个版本也可升级,但不能从高版本升为低版本。
- 查看版本兼容性,可以确定能否升级。
- 升级不会改动任何配置和数据。
- 需要root用户
- 需要检查升级版本是否支持升级,如果不支持就先卸载然后再升级
- 升级注意事项
- sdb在线升级需要集群模式,并且需要多个副本。
- 版本升级前应该停止当前服务器的协调节点,编目节点,数据节点,om节点,cm节点
- 如果sdb集群进行在线升级数据库版本,当前数据库集群的查询或者写入可能有部分请求失败
- 直接覆盖升级和卸载后升级没什么不同
- 覆盖安装的方式升级数据库版本,找回老版本信息是过/opt/sequoiadb/rollback找回可执文件
- 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190592-edition_id-0
- 升级说明
-
确认主从节点
-
snapshot(12)当前节点健康信息(可以查看是否是主从节点)
-
list(7)也有参数是可以确认主从节点
-
snapshot(6)也是可以确认当前节点是否为主从
-
有主从节点角色之分的有编目节点和数据节点
-
-
离线备份与恢复
-
全量备份:备份整个数据库的配置、数据和日志(可选);
-
增量备份:在上一个全量备份或增量备份的基础上备份新增的日志和配置;增量备份需要保证日志的连续性和一致性,如果日志不连续,或日志Hash校验不一致,则增量备份失败。因此,周期性的增量备份需要计算好日志和周期的关系,以防止日志覆写。
-
sdb的备份方案全量备份和增量备份
-
离线备份支持的节点有数据节点和编目节点
-
如果只想离线备份一个group可以执行db.backupOffline({GroupName:“group1”})或者db.backupOffline({GroupID:10005})
-
离线备份是作用在分组的主节点上,确保数据是最新的
-
在备份期间不能够对外提供数据写入(加上锁)
-
执行离线备份的默认将文件保存在/DBPATH/bakfile
-
增量备份应该注意到增量数据不能够超过ReplicaLOG的日志大小
-
确保定期对sdb全集群的增量备份操作成功需要适当调整每个节点ReplicaLOG的总大小
-
全量备份是主要来源数据文件,增量备份主要来源于replicalog,所以增量备份数据不能大于replicalog(类似于事务日志,默认是64m文件一共有二十个,超过就被最新的覆盖最旧的)覆盖后执行增量备份(由于replicalog的内存太小)是会报错的,可以在节点的配置文件sdb.conf进行事务日志的大小配置logfilesz(一般可以调大一些),logfilenum(一般不变)
-
备份连接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190664-edition_id-0
-
对sdb的离线备份文件做数据恢复
- 需要恢复的节点需要提前停止
- 恢复时需要注意数据库冗余节点的数据同步
- 执行sdbrestore -p bakfile -n test_bk
-
离线备份文件的数据恢复工具在sdb安装软件默认包含备份恢复工具
-
备份信息的查看
链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190665-edition_id-0 -
恢复备份过程
- 停止服务
- 删除数据
- 执行sdbrestore -p bakfile -n all
- 启动服务
- 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190666-edition_id-0
-
-
集群扩容
-
就是新建group节点,然后添加到domain上,进行扩容
-
就是使用主子表切分,新建一个数据域Domain2绑定几个新的group节点
然后新建一个新的集合空间创建子表,还是利用之前的主表进行扩容,可
以无缝扩容。这样还是写以前的主表,但是新的内容还是回到新的Domain上 -
扩容影响
-
硬件扩容只是创建新的数据分区组,不会对数据库服务有什么影响
-
如果数据库扩容后需要做split操作,数据也能够正常对外提供服务(异步切分Async)
-
如果sdb完成了扩容,想对数据重新均衡需要用户显式调用split或者调用splitAsync进行
-
用户执行splitAsync后,返回的ID用于查看后台split操作是否完成,还可以主动停止未完成的split操作
-
扩容后可以通过DBDomain.alter方法进行更新
-
扩容后不做任何数据分布达到数据均衡两种方法
- 采用主子表方法
- 利用Domain来管理新的服务器资源
-
-
删除的数据分组不能存储任何的数据
-
新建主机:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1485051401-edition_id-0
-
新建节点:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1485051402-edition_id-0
-
-
删除数据分组
-
还是通过split来进行切分,db,foo.bar.split(‘group3’,‘group1’,{Partition:2048},{Partition:3072})就是将group3分回到group1上
-
然后通过removeRG()删除不要的分组(这个api不能删除非空的数据组)
-
-
附录
-
在sdb建立唯一索引的时候,如果数据是被切分的,那么这个唯一索引就必须包含这个被切分的键
-
var sdb = new Sdb(),sdb.list(4)能查看集合,sdb.list(5)能查看集合空间,sdb.list()1,2,3能查看当前的用户信息,sdb.list(7)能够查看分区组信息
-
db.snapshot(8)能查看复制组
-
主子表,如果向主表插入一条不包含有分割字段的记录是会报错误-135。如果能插入成功
那么插入的数据就会按照分区插入子表上(独立部署模式是不支持主子表的) -
sdb的List和snapshot
-
在sdb中,如果获取了bson对象,那么可以通过bson.toString()方法转换成json
-
OM不支持Domain功能
-
db.list(9)可以查看Domain情况
-
版本2.8开始sdb的OM就支持节点的启停
-
sdbstart /sdb_home/conf/local/service.conf通过配置文件也可以对数据库启停
-
sdb在om上是不支持domain数据域的
-
在创建集合的AutoSplit优先级高于在创建Domain的AutoSplit上
-
二维切分的优势
1.数据的颗粒度更高
2.特定场合性能可能比普通表差
3.特定场合可以提高内存命中率
4.特定场合可以快速缩减匹配记录数 -
Lob的默认大小为256k
-
Lob在集合中根据集合切分,还有只有当集合按照hash切分才能支持按照条件切分小文件
-
在集合中下载一个Lob只能是db.foo.bar.getLob(“xxxxxxxstring”,"/xxx/xxx/路径")
-
AutoIndexId参数是设置是否删除_id字段索引
-
sdb如果没有开启事务执行写入操作,那么写入失败
-
json结构导入不关心数据类型,不关心表结构,csv关系表结构不关心数据类型
-
导入日志的作用,帮助使用者了解导入程序运行到什么阶段,帮助使用者定位导
入失败的原因 -
导入文件第一行是表结构,那么默认情况下导入程序会将第一行当作正常数据处理
可以使用–headerline参数忽略第一行 -
导入失败的数据和解析失败的数据会记录在当前执行目录的Rec文件中
-
如果导入内容和表结构数据类型不相符,如果支持数据转换,则进行数据转换后导入
-
将一个文件夹或者文件导入到sdb那么路径是通过–file参数写入的
-
提高导入工具的性能,多线程,连接上更多的coord节点,调整导入工具的批数据写入大小
-
导入工具修改记录分隔符参数–delrecord,-r
-
导入gong修改字段分隔符参数----delfield,-e
-
导入工具的字符集是utf-8中文也是支持这个
-
如果导入要忽略第二列字段就在字段旁加上skip–fields "fid=“field1,field2 skip,field3”
-
导入文件希望增加一个字段
–fields “name,id,log default ‘abc’’” --extra true -
聚集功能格式
db.foo.bar.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"id"},sumNum:{ sum"}})
db.foo.bar.aggregate({“KaTeX parse error: Expected '}', got 'EOF' at end of input: group":{"_id":"id”,“log”:{“ sum”}}})
就是加上“”也行,我佛了 -
sdb集群默认情况下是数据的最终一致性兼容,并非是强一致性兼容
-
getErr()可以通过错误码获取错误信息
-
sdb删除是需要root用户的
-
查看安装目录是通过/etc/default/sequoiadb文件,里面有安装路径,用户信息
-
sdbadmin是操作系统的普通用户
-
安装sdb时,开机自启动代表着sdbcm是否需要将当前机器的所有数据库服务都启动
-
选择默认方式进行安装是通过–mode unttended参数进行静默启动
-
cm的高可用就是通过cmd与cm互相守护进行自身的高可用的
-
命令行部署注意要点。1.sdbadmin用户应该拥有节点的读写权限,2.所有机器都必须启动cm节点
-
sdb原生支持有限的sql语法,需要对接sql引擎才能支持标准sql
-
sdb的sql引擎是pgsql9.3.4
-
ubantu编译pgsql需要使用安装readlib库和zlib库
-
启动pgsql时,root用户是无法启动的,需要postgres用户。还得检查5432端口是否被占用
-
如果需要postgresql被其他机器用户访问
修改postgresql.conf配置文件,将listen_addresses参数设置为0.0.0.0
修改pg_hba.conf文件,设置监听其他的ip地址请求 -
PostgreSQL对接sdb能够进行,增删改查和关联查询
-
想要PostgreSQL的shell中查看SQL引擎想sdb发送的查询条件上
设置set client_min_messages=debug1,需要修改配置文件后重启才生效 -
如果sdb的ip发生了变动,那么sdb服务还是能正常启动,但是数据库会处于异常状态
-
sdb的进程日志路径,/sequoiadb/database/coord/11810/diaglog/sdbdig.log
-
修复ip变化问题,有OM就通过OM,没有就手动修改,/etc/hosts
-
sdb修改使支持事务功能
1.需要用户在PostgreSQL创建server时制定打开事务功能
2.如果sdb要使用事务功能,就需要提前为数据库节点开启事务功能 -
pgsql使用sdb的事务功能需要在创建server的时候就打开事务功能
-
声明使用事务功能后,用户应该先重新连接pgsql,否则老会话导致事务功能不生效
-
审计日志的功能,记录数据库执行的操作命令,帮助dba定位问题
-
审计日志能够审计的内容
bson记录的增删改查,LOB的创建但是内容不会保存,LOB的删除记录 -
审计日志是节点级别的
-
java连接sdb与传统数据库的区别
java连接sdb是通过jar的api连接的,传统的是通过jdbc进行连接
sdb不能够使用sql命令 -
快速了解java连接sdb的方法
官网查看api查看bson的使用,可以通过安装目录的samples文件学习 -
java连接sdb的jar哪里获取
通过官网下载
sdb的安装路径
github的源码编译
maven中央库 -
在sdb的javaapi中DBCollection.query方法返回的是DBCursor游标
-
java保存一个小于等于16m非结构化文件数据,可以使用BSON的二进制进行存储
如果存储的文件过大那就使用lob进行存储 -
sdb在线升级需要集群模式,并且需要多个副本。
-
版本升级前应该停止当前服务器的协调节点,编目节点,数据节点,om节点,cm节点
-
如果sdb集群进行在线升级数据库版本,当前数据库集群的查询或者写入可能有部分请求失败
-
直接覆盖升级和卸载后升级没什么不同
-
覆盖安装的方式升级数据库版本,找回老版本信息是通过/opt/sequoiadb/rollback找回可执
文件 -
有主从节点角色之分的有编目节点和数据节点
-
ReplicaRG.reelect方法用途,在线重新为分区组选择主节点,不重启动切换分区组的主节点
-
在数据分区调用ReplicaRG.reelect方法重新选择主节点的过程中,部分数据的写入可能会失败
-
在编目分区上调用ReplicaRG.reelect重新选择主节点,部分写入会失败,部分查询请求会失败
-
sdb的备份方案全量备份和增量备份
-
离线备份支持的节点有数据节点和编目节点
-
如果只想离线备份一个group可以执db.backupOffline({GroupName:“group1”})
或者db.backupOffline({GroupID:10005}) -
离线备份是作用在分组的主节点上
-
在备份期间不能够对外提供数据写入
-
执行离线备份的默认将文件保存在/DBPATH/bakfile
-
增量备份应该注意到增量数据不能够超过ReplicaLOG的日志大小
-
确保定期对sdb全集群的增量备份操作成功需要适当调整每个节点ReplicaLOG的总大小
-
对sdb的离线备份文件做数据恢复
1.需要恢复的节点需要提前停止
2.恢复时需要注意数据库冗余节点的数据同步
3.执行sdbrestore -p bakfile -n test_bk -
离线备份文件的数据恢复工具在sdb安装软件默认包含备份恢复工具
-
备份过程
1.停止服务
2.删除数据
3.执行sdbrestore -p bakfile -n all
4.启动服务 -
硬件扩容产生的影响
1.硬件扩容只是创建新的数据分区组,不会对数据库服务有什么影响
2.如果数据库扩容后需要做split操作,数据也能够正常对外提供服务 -
如果sdb完成了扩容,想对数据重新均衡需要用户显式调用split或者调用splitAsync进行
-
用户执行splitAsync后,返回的ID用于查看后台split操作是否完成,还可以主动停止未完成的split操作
-
扩容后可以通过DBDomain.alter方法进行更新
-
扩容后不做任何数据分布达到数据均衡两种方法
-
采用主子表方法
-
利用Domain来管理新的服务器资源
-
删除的数据分组不能存储任何的数据
-
缩容操作:删除需要缩容的服务器上的数据分组,删除需要缩容的服务器上的相关节点
-
关于数据list与snapshot的使用
list(1) 返回当前主机的节点的信息
list(2)编目节点和数据节点的连接信息(次数状态等)
list(3)是协调节点连接数据节点和编目节点的信息(状态)
list(4)返回集合
list(5)返回集合空间
list(6)列出节点的存储单元信息,一般在数据节点上有用
list(7)列出了分组信息
list(8)列出事务列表
list(9)列出事务分组group的归属数据域
list(10)列出序列信息
-