sdb笔记

版权声明:转载请指明出处 https://blog.csdn.net/hx_131211/article/details/88385170

Sequoiadb精简学习笔记

  • 安装

  1. 硬件要求:磁盘10G,建议100G,内存1G,建议2G,至少一张网卡

  2. 操作系统要求:RedHat6,ubuntu12,CentOS6,SUSE11以上

  3. 修改主机的hostname

  • SUSE修改文件$ vi /etc/HOSTNAME
  • RedHat7以下,$ vi /etc/sysconfig/network
  • RedHat7修改/etc/hostname,HOSTNAME = SERVERNAME
  • ubuntu修改文件$ vi /etc/hostname
  1. 网络映射:$ vi /etc/hosts

  2. 通过ping来进行验证网络映射是否生效

  3. 关闭防火墙

    • SUSE的操作

      • SuSEfirewall2 stop
      • chkconfig SuSEfirewall2_init off
      • chkconfig SuSEfirewall2_setup off
    • RedHat的操作

    • service iptables stop

    • chkconfig iptables off

    • Ubuntu的操作

      • ufw disable
  4. 验证方法:

    • SUSE:$ chkconfig -list | grep fire
    • RedHat:$ service iptables status
    • Ubuntu:$ ufw status
  5. linux推荐配置:

    • 配置/etc/security/limits.conf ----数据库的基本性能配置
    • 配置 /etc/security/limits.d/90-nproc.conf ----线程的最大数目
    • 配置/etc/sysctl.conf -------调整linux内核参数,配置好使用$ /sbin/sysctl -p使配置文件生效
  6. 关闭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
  1. 关闭NAMA

  2. 命令行安装过程

    1. hostname配置
    2. hostname和ip的地址映射
    3. 关闭防火墙
    4. 使用root用户安装
    5. 在每一台物理机上都手动安装一次
  3. 安装链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432191002-edition_id-0

  • 节点的启停操作

    1. 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 启动集群管理节点
        在这里插入图片描述
    2. 集群启动:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190661-edition_id-0

    3. 集群停止: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
  • 水平切分以及数据域

  1. 生成数据域db.createDomain()
    链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190774-edition_id-0

  2. 为数据域添加分组domain.addGroups()
    链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1524019940-edition_id-0

  3. 创建数据组db.createRG()
    链接 http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190776-edition_id-0

  4. 通过上面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

  5. 链接

  • 切分 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

  • 主子表创建

    1. 创建主表
    2. 创建子表
    3. 建立联系main.attachCL(‘foo.bar1’,xxxx,xxxx)
    4. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1454575727-edition_id-0

  • 二维切分

    1. 主子表按照范围range切分,集合层面切分
    2. 数据域管理分区组对主子表集合进行hash切分

  • Lob使用

    1. 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,大对象存在的意义就是为了突破空间限制

    2. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190630-edition_id-0

  • 索引介绍

    1. 一个索引建立在一个集合上面,一个集合最多有64个索引

    2. sdb索引结构是基于B树

    3. 在 SequoiaDB 中,所有集合均包含一个名为“ i d i d id”的强制唯一索引。该索引包含一个“_id”字段的索引键。所有的分区集合在创建时均会自动生成一个额外的“ shard”索引,索引键为用户指定的分区键字段。

    4. 索引格式在这里插入图片描述

    5. 索引链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190613-edition_id-0

    6. 全文索引

      连接http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1519293420-edition_id-0

  • 事务功能

    1. sdb事务使用

      1. sdb事务默认是关闭的,

      2. 如要打开事务功能需要在节点的配置文件中配置参数:transactionon = TRUE;在创建数据节点时,增加JSON 类型的参数:{ “transactionon”: “YES” } 或 { “transactionon”: true }。

      3. 要打开事务功能,必须将logfilenum设置为大于等于5的值(如果未单独配置,其默认为20,则不需要修改)

      4. db.transBegin() //事务开启 db.transCommit();//事务提交 db.transRollback(); //事务回滚

      5. 并发开启事务锁定集合,会发生用户等待默认是等待一分钟,超过就报超时等待

      6. 事务开启是需要到将每一台的主机的数据节点的配置文件(conf/local/11830/sdb.conf)中将transactionon设置为true。

    2. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190590-edition_id-0

  • 数据导出

    1. sdbexprt
      将sdb数据导出以JSON或CSV的存储格式,支持将一个集合导出到一个文件,也支持将多个集合批量导出到指定集合目录下。

    2. JSON
      JSON 导出格式中的 JSON 记录符合 JSON 的定义,以左右花括号作为 JSON 记录的分界符,并且字符串类型的数据必须包含在两个双引号之间,转义字符为反斜杠“\”。默认情况下(SequoiaDB的)记录以换行符分隔。用户能够指定记录分隔符。

    3. CSV
      CSV(Comma Separated Value)导出格式以逗号分隔数值。默认情况下记录以换行符分隔,字段以逗号分隔。用户能够指定字符串分隔符、字段分隔符以及记录分隔符。

    4. 转意分割符
      分隔符可以使用 ASCII 码中的不可见字符,通过转义字符“\”输入 ASCII 码的十进制数值(0 ~ 127),例如“\30”。回车符、换行符、制表符、转义字符“\”可以直接使用“\r”,“\n”,“\t”,“\”。
      可以使用 UTF-8 字符作为分隔符。
      可以使用多个字符作为分隔符。

    5. 示例代码

      $ sdbexprt -s localhost -p 11810 --type csv --file foo.bar.csv --fields field1,fieldNotExist,field3 -c foo -l bar
      
    6. 使用参数
      记录分割符号参数-r或–delrecord,字符分隔符-a或–delchar,字段分割符是-e或–delfield,-s或者是–hostname表示为主机名,-p或–svcname表示端口号名

    7. 注意事项

      • 导出工具支持单集合导出和多集合批量导出, 单集合选项 只能用于导出一个集合,但具有更灵活的导出条件选项,如过滤、排序。
      • 导出多集合到 csv 格式时,必须使用 --fields 选项对每一个集合指定字段,工具提供的 --genconf 选项将每一个集合的第一行记录的字段导出到配置文件中的 --fields 选项,可以比较方便地编辑每一个集合的字段。
      • –genconf 选项将当前命令行的选项写入到配置文件中,下次使用 --conf 选项指定配置文件执行即可,这提供一种多次执行相似命令的便捷方式,另外这种方式主要用于在多集合导出 csv 情况下,对每一个集合生成对应的 --fields 选项。
      • 导出单集合时,–select 具有和 --fields 选项一样的作用,但 --select 选项更加灵活。
      • 当不指定导出任何集合或者集合空间,即 -c、-l、–cscl 都不指定,则导出数据库中所有的集合。
      • 当使用配置文件的选项和命令行选项一样时,优先选择命令行值。
    8. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1479195621-edition_id-0

  • 数据导入

    1. 导入的分割符
      在这里插入图片描述

    2. CSV不支持的自动类型的识别
      在不指定 CSV 字段类型时,导入工具会自动判断类型。其中 oid、date、timestamp、binary、regex 不支持自动类型判断,会被识别为 string 类型。整数超过 long 的范围,浮点数超过 double 的范围,以及浮点数总位数超过 15 位或小数位超过 6 位时,类型判断为 decimal。

    3. 使用建议

      • 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

    4. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1479195620-edition_id-0

  • 聚集功能

    1. 使用数据聚集的方式
      在这里插入图片描述
      在字段前加上"$",第一组就是做groupby,第二组就是sort,第三组是选择输出的字段

    2. 聚集功能格式
      db.foo.bar.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"id"},sumNum:{ s u m : " sum:" sum"}})
      db.foo.bar.aggregate({“KaTeX parse error: Expected '}', got 'EOF' at end of input: group":{"_id":"id”,“log”: {“ s u m " : " sum":" sum”}}})
      就是加上“”也行

    3. 链接: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

  • 单个节点数据库卸载

  1. sdb的卸载

  2. 在cat /etc/default/squoiadb可以查看到基本信息

  3. 然后通过sdbstop -t all 与 sdbcmtop停止所有sdb的节点

  4. 通过sdblist -t all -l -m local查看节点路径以及数据保存地点

  5. 然后删掉数据节点,rm -rf /sequoiadb/database

  6. 之后就可以使用./uninstall进行卸载 --mode unattended不显示删除进度第五步的卸载是不会把自己新建的文件夹删除(包含许多配置文件)

  7. 实在是想完全删除整个就将整个文件夹删除

  8. 最后是通过userdel sdbadmin将这个用户给删除

  9. 在tmp目录下也需要将sequoiadb目录删掉(保存临时文件用的)

  • 集群安装部署

    1. sdb基于命令行的集群部署(基于ubuntu)

    2. 修改/etc/hostname将各个主机ip和主机名映射关系配置好

    3. 需要在部署的机器上都下载run包

    4. 全部选择默认安装

    5. 以后的各种数据节点挂载都是在/opt/sequoiadb/database下如果需要修改挂载到/sequoiadb/database下,需要将sdbadmin授予权限chown sdbadmin:adbadmin_group -R /sequoiadb/database/

    6. 然后切换到sdbadmin目录下使用touch验证是否能生成文件

    7. 接着就是运行创建一个临时协调节点

    8. 通过协调节点创建一个编目节点组并启动

    9. 通过协调节点创建数据节点组并启动

    10. 通过协调节点创建一个协调节点组并启动

    11. 删除临时协调节点,链接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

    1. sdb连接PostgreSQL(PostgreSQL版本需要9.3.4以上)

    2. 下载PostgreSQL源码包,解压。

    3. 需要外库
      sudo apt-get install libreadline6-dev
      sudo apt-get install zlib1g-dev

    4. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190586-edition_id-300

  • 物理机IP发生变化的解决方法

  1. 如果存在OM界面的,可以直接在界面上更新。
  2. 如果在shell上,那就只能修改所有的配置链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1483944503-edition_id-300
  • sdb对PostgreSQL打开事务

    Sequoiadb打开PostgreSQL的事务功能
  1. 就是在创建PSsql的server时候进行事务功能开启

  2. 如果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是参数写入

  • 审计日志

    1. 审计日志主要作用就是记录连接后操作的日志。可以在节点配置文件conf/local/11910/sdb.conf中设置日志的写入级别,修改后重启节点即可

    2. 审计日志的文件路径是在/opt/sequoiadb/database/coord/11810/diaglog

    3. 事务日志都是节点级别的日志,在createNode上可以指定日志的配置
      –auditpath制定审计日志存放目录
      –auditmask指定审计日志的级别
      –diagnum诊断日志的最大文件数量
      可以通过直接在配置文件上配置参数----/conf/local/11910/sdb.conf
      某个节点的日志一般是记录被链接后对节点的操作。所以操作数据库集群一般是
      只需要操作协调节点coord在协调节点上打开审计日志即可

    4. 审计日志的功能,记录数据库执行的操作命令,帮助dba定位问题
      审计日志能够审计的内容
      bson记录的增删改查,LOB的创建但是内容不会保存,LOB的删除记录
      审计日志是节点级别的

    5. 具体参数链接: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

  • 集群在线版本升级

    1. 升级说明
      • 只能支持向后兼容,同个版本也可升级,但不能从高版本升为低版本。
      • 查看版本兼容性,可以确定能否升级。
      • 升级不会改动任何配置和数据。
    2. 需要root用户
    3. 需要检查升级版本是否支持升级,如果不支持就先卸载然后再升级
    4. 升级注意事项
      • sdb在线升级需要集群模式,并且需要多个副本。
      • 版本升级前应该停止当前服务器的协调节点,编目节点,数据节点,om节点,cm节点
      • 如果sdb集群进行在线升级数据库版本,当前数据库集群的查询或者写入可能有部分请求失败
      • 直接覆盖升级和卸载后升级没什么不同
      • 覆盖安装的方式升级数据库版本,找回老版本信息是过/opt/sequoiadb/rollback找回可执文件
    5. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190592-edition_id-0

  • 确认主从节点

    1. snapshot(12)当前节点健康信息(可以查看是否是主从节点)

    2. list(7)也有参数是可以确认主从节点

    3. snapshot(6)也是可以确认当前节点是否为主从

    4. 有主从节点角色之分的有编目节点和数据节点

  • 离线备份与恢复

    • 全量备份:备份整个数据库的配置、数据和日志(可选);

    • 增量备份:在上一个全量备份或增量备份的基础上备份新增的日志和配置;增量备份需要保证日志的连续性和一致性,如果日志不连续,或日志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的离线备份文件做数据恢复

      1. 需要恢复的节点需要提前停止
      2. 恢复时需要注意数据库冗余节点的数据同步
      3. 执行sdbrestore -p bakfile -n test_bk
    • 离线备份文件的数据恢复工具在sdb安装软件默认包含备份恢复工具

    • 备份信息的查看
      链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190665-edition_id-0

    • 恢复备份过程

      1. 停止服务
      2. 删除数据
      3. 执行sdbrestore -p bakfile -n all
      4. 启动服务
      5. 链接:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1432190666-edition_id-0

  • 集群扩容

    1. 就是新建group节点,然后添加到domain上,进行扩容

    2. 就是使用主子表切分,新建一个数据域Domain2绑定几个新的group节点
      然后新建一个新的集合空间创建子表,还是利用之前的主表进行扩容,可
      以无缝扩容。这样还是写以前的主表,但是新的内容还是回到新的Domain上

    3. 扩容影响

      • 硬件扩容只是创建新的数据分区组,不会对数据库服务有什么影响

      • 如果数据库扩容后需要做split操作,数据也能够正常对外提供服务(异步切分Async)

      • 如果sdb完成了扩容,想对数据重新均衡需要用户显式调用split或者调用splitAsync进行

      • 用户执行splitAsync后,返回的ID用于查看后台split操作是否完成,还可以主动停止未完成的split操作

      • 扩容后可以通过DBDomain.alter方法进行更新

      • 扩容后不做任何数据分布达到数据均衡两种方法

      1. 采用主子表方法
      2. 利用Domain来管理新的服务器资源
    4. 删除的数据分组不能存储任何的数据

    5. 新建主机:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1485051401-edition_id-0

    6. 新建节点:http://doc.sequoiadb.com/cn/SequoiaDB-cat_id-1485051402-edition_id-0

  • 删除数据分组

    1. 还是通过split来进行切分,db,foo.bar.split(‘group3’,‘group1’,{Partition:2048},{Partition:3072})就是将group3分回到group1上

    2. 然后通过removeRG()删除不要的分组(这个api不能删除非空的数据组)

  • 附录

    1. 在sdb建立唯一索引的时候,如果数据是被切分的,那么这个唯一索引就必须包含这个被切分的键

    2. var sdb = new Sdb(),sdb.list(4)能查看集合,sdb.list(5)能查看集合空间,sdb.list()1,2,3能查看当前的用户信息,sdb.list(7)能够查看分区组信息

    3. db.snapshot(8)能查看复制组

    4. 主子表,如果向主表插入一条不包含有分割字段的记录是会报错误-135。如果能插入成功
      那么插入的数据就会按照分区插入子表上(独立部署模式是不支持主子表的)

    5. sdb的List和snapshot
      在这里插入图片描述
      在这里插入图片描述

    6. 在sdb中,如果获取了bson对象,那么可以通过bson.toString()方法转换成json

    7. OM不支持Domain功能

    8. db.list(9)可以查看Domain情况

    9. 版本2.8开始sdb的OM就支持节点的启停

    10. sdbstart /sdb_home/conf/local/service.conf通过配置文件也可以对数据库启停

    11. sdb在om上是不支持domain数据域的

    12. 在创建集合的AutoSplit优先级高于在创建Domain的AutoSplit上

    13. 二维切分的优势
      1.数据的颗粒度更高
      2.特定场合性能可能比普通表差
      3.特定场合可以提高内存命中率
      4.特定场合可以快速缩减匹配记录数

    14. Lob的默认大小为256k

    15. Lob在集合中根据集合切分,还有只有当集合按照hash切分才能支持按照条件切分小文件

    16. 在集合中下载一个Lob只能是db.foo.bar.getLob(“xxxxxxxstring”,"/xxx/xxx/路径")

    17. AutoIndexId参数是设置是否删除_id字段索引

    18. sdb如果没有开启事务执行写入操作,那么写入失败

    19. json结构导入不关心数据类型,不关心表结构,csv关系表结构不关心数据类型

    20. 导入日志的作用,帮助使用者了解导入程序运行到什么阶段,帮助使用者定位导
      入失败的原因

    21. 导入文件第一行是表结构,那么默认情况下导入程序会将第一行当作正常数据处理
      可以使用–headerline参数忽略第一行

    22. 导入失败的数据和解析失败的数据会记录在当前执行目录的Rec文件中

    23. 如果导入内容和表结构数据类型不相符,如果支持数据转换,则进行数据转换后导入

    24. 将一个文件夹或者文件导入到sdb那么路径是通过–file参数写入的

    25. 提高导入工具的性能,多线程,连接上更多的coord节点,调整导入工具的批数据写入大小

    26. 导入工具修改记录分隔符参数–delrecord,-r

    27. 导入gong修改字段分隔符参数----delfield,-e

    28. 导入工具的字符集是utf-8中文也是支持这个

    29. 如果导入要忽略第二列字段就在字段旁加上skip–fields "fid=“field1,field2 skip,field3”

    30. 导入文件希望增加一个字段
      –fields “name,id,log default ‘abc’’” --extra true

    31. 聚集功能格式
      db.foo.bar.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"id"},sumNum:{ s u m : " sum:" sum"}})
      db.foo.bar.aggregate({“KaTeX parse error: Expected '}', got 'EOF' at end of input: group":{"_id":"id”,“log”:{“ s u m " : " sum":" sum”}}})
      就是加上“”也行,我佛了

    32. sdb集群默认情况下是数据的最终一致性兼容,并非是强一致性兼容

    33. getErr()可以通过错误码获取错误信息

    34. sdb删除是需要root用户的

    35. 查看安装目录是通过/etc/default/sequoiadb文件,里面有安装路径,用户信息

    36. sdbadmin是操作系统的普通用户

    37. 安装sdb时,开机自启动代表着sdbcm是否需要将当前机器的所有数据库服务都启动

    38. 选择默认方式进行安装是通过–mode unttended参数进行静默启动

    39. cm的高可用就是通过cmd与cm互相守护进行自身的高可用的

    40. 命令行部署注意要点。1.sdbadmin用户应该拥有节点的读写权限,2.所有机器都必须启动cm节点

    41. sdb原生支持有限的sql语法,需要对接sql引擎才能支持标准sql

    42. sdb的sql引擎是pgsql9.3.4

    43. ubantu编译pgsql需要使用安装readlib库和zlib库

    44. 启动pgsql时,root用户是无法启动的,需要postgres用户。还得检查5432端口是否被占用

    45. 如果需要postgresql被其他机器用户访问
      修改postgresql.conf配置文件,将listen_addresses参数设置为0.0.0.0
      修改pg_hba.conf文件,设置监听其他的ip地址请求

    46. PostgreSQL对接sdb能够进行,增删改查和关联查询

    47. 想要PostgreSQL的shell中查看SQL引擎想sdb发送的查询条件上
      设置set client_min_messages=debug1,需要修改配置文件后重启才生效

    48. 如果sdb的ip发生了变动,那么sdb服务还是能正常启动,但是数据库会处于异常状态

    49. sdb的进程日志路径,/sequoiadb/database/coord/11810/diaglog/sdbdig.log

    50. 修复ip变化问题,有OM就通过OM,没有就手动修改,/etc/hosts

    51. sdb修改使支持事务功能
      1.需要用户在PostgreSQL创建server时制定打开事务功能
      2.如果sdb要使用事务功能,就需要提前为数据库节点开启事务功能

    52. pgsql使用sdb的事务功能需要在创建server的时候就打开事务功能

    53. 声明使用事务功能后,用户应该先重新连接pgsql,否则老会话导致事务功能不生效

    54. 审计日志的功能,记录数据库执行的操作命令,帮助dba定位问题

    55. 审计日志能够审计的内容
      bson记录的增删改查,LOB的创建但是内容不会保存,LOB的删除记录

    56. 审计日志是节点级别的

    57. java连接sdb与传统数据库的区别
      java连接sdb是通过jar的api连接的,传统的是通过jdbc进行连接
      sdb不能够使用sql命令

    58. 快速了解java连接sdb的方法
      官网查看api查看bson的使用,可以通过安装目录的samples文件学习

    59. java连接sdb的jar哪里获取
      通过官网下载
      sdb的安装路径
      github的源码编译
      maven中央库

    60. 在sdb的javaapi中DBCollection.query方法返回的是DBCursor游标

    61. java保存一个小于等于16m非结构化文件数据,可以使用BSON的二进制进行存储
      如果存储的文件过大那就使用lob进行存储

    62. sdb在线升级需要集群模式,并且需要多个副本。

    63. 版本升级前应该停止当前服务器的协调节点,编目节点,数据节点,om节点,cm节点

    64. 如果sdb集群进行在线升级数据库版本,当前数据库集群的查询或者写入可能有部分请求失败

    65. 直接覆盖升级和卸载后升级没什么不同

    66. 覆盖安装的方式升级数据库版本,找回老版本信息是通过/opt/sequoiadb/rollback找回可执
      文件

    67. 有主从节点角色之分的有编目节点和数据节点

    68. ReplicaRG.reelect方法用途,在线重新为分区组选择主节点,不重启动切换分区组的主节点

    69. 在数据分区调用ReplicaRG.reelect方法重新选择主节点的过程中,部分数据的写入可能会失败

    70. 在编目分区上调用ReplicaRG.reelect重新选择主节点,部分写入会失败,部分查询请求会失败

    71. sdb的备份方案全量备份和增量备份

    72. 离线备份支持的节点有数据节点和编目节点

    73. 如果只想离线备份一个group可以执db.backupOffline({GroupName:“group1”})
      或者db.backupOffline({GroupID:10005})

    74. 离线备份是作用在分组的主节点上

    75. 在备份期间不能够对外提供数据写入

    76. 执行离线备份的默认将文件保存在/DBPATH/bakfile

    77. 增量备份应该注意到增量数据不能够超过ReplicaLOG的日志大小

    78. 确保定期对sdb全集群的增量备份操作成功需要适当调整每个节点ReplicaLOG的总大小

    79. 对sdb的离线备份文件做数据恢复
      1.需要恢复的节点需要提前停止
      2.恢复时需要注意数据库冗余节点的数据同步
      3.执行sdbrestore -p bakfile -n test_bk

    80. 离线备份文件的数据恢复工具在sdb安装软件默认包含备份恢复工具

    81. 备份过程
      1.停止服务
      2.删除数据
      3.执行sdbrestore -p bakfile -n all
      4.启动服务

    82. 硬件扩容产生的影响
      1.硬件扩容只是创建新的数据分区组,不会对数据库服务有什么影响
      2.如果数据库扩容后需要做split操作,数据也能够正常对外提供服务

    83. 如果sdb完成了扩容,想对数据重新均衡需要用户显式调用split或者调用splitAsync进行

    84. 用户执行splitAsync后,返回的ID用于查看后台split操作是否完成,还可以主动停止未完成的split操作

    85. 扩容后可以通过DBDomain.alter方法进行更新

    86. 扩容后不做任何数据分布达到数据均衡两种方法

    87. 采用主子表方法

    88. 利用Domain来管理新的服务器资源

    89. 删除的数据分组不能存储任何的数据

    90. 缩容操作:删除需要缩容的服务器上的数据分组,删除需要缩容的服务器上的相关节点

    91. 关于数据list与snapshot的使用
      list(1) 返回当前主机的节点的信息
      list(2)编目节点和数据节点的连接信息(次数状态等)
      list(3)是协调节点连接数据节点和编目节点的信息(状态)
      list(4)返回集合
      list(5)返回集合空间
      list(6)列出节点的存储单元信息,一般在数据节点上有用
      list(7)列出了分组信息
      list(8)列出事务列表
      list(9)列出事务分组group的归属数据域
      list(10)列出序列信息

猜你喜欢

转载自blog.csdn.net/hx_131211/article/details/88385170