####1、DDL测试 #####(1)sequoiaSQL-mysql 增加列带默认值无效问题 ![输入图片说明](http://imgs.itopers.com/163446_0593c80c_469976.jpeg "在这里输入图片标题") sequoiadb 通过mysql登录添加字段,带默认值并没有用。 加字段只改mysql元数据,sequoiadb并没有变动。这样会解决加字段速度问题。但这里并没有解决好。其实可以在查的时候把默认值显示出来,如果sequoiadb中有新加d列,就显示sequoiadb的值,没有就显示默认值。 已经在gitee上提了issue,也在qq群反馈,已经提case。https://gitee.com/wangzhonnew/SequoiaDB/issues/IR3WT #####(2)无法创建自增列 这点官方明确了这点,不过要完全兼容mysql,这点是必不可少的,mysql中规范中是建议使用自增列为主键,大部分都会带自增主键:*SequoiaSQL-MySQL使用注意事项* 不支持设置自增字段; 不支持创建外键; 时间戳类型字段取值范围为:1902-01-01 00:00:00.000000 至 2037-12-31 23:59:59.999999; 通过MySQL创建的索引,不可直接在SequoiaDB上对索引执行删除或修改操作; 复合唯一索引仅支持所有字段null值重复,不允许部分字段null值重复,例如:允许出现(null,null)和(null,null)重复值,但不允许出现(1,null)和(1,null)重复值; 建表时默认创建分区表。如在分区表建立新的唯一索引,必须包含其分区键(分区键依次优先选择主键,唯一键及第一个字段)。如需更改创建分区表配置见配置说明; 不支持在BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB、JSON类型的字段上创建索引; 一个MySQL节点仅可与一个SequoiaDB集群对接,不支持跨多个SequoiaDB集群; 默认字符集为utf8mb4,不支持忽略大小写的字符比较规则,字符比较对大小写敏感; VARCHAR、TEXT查询比较时不会忽略尾部空格。 DDL操作不支持事务。 #####(3)索引长度问题 root 17:31: [sbtest]> alter table sbtest3 add index idx_e(e); ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes root 17:31: [sbtest]> show create table sbtest3\G *************************** 1. row *************************** Table: sbtest3 Create Table: CREATE TABLE `sbtest3` ( `id` int(10) unsigned NOT NULL, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) COLLATE utf8mb4_bin NOT NULL DEFAULT '', `pad` char(60) COLLATE utf8mb4_bin NOT NULL DEFAULT '', `e` varchar(500) COLLATE utf8mb4_bin NOT NULL DEFAULT 'a', PRIMARY KEY (`id`) ) ENGINE=SEQUOIADB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin 1 row in set (0.00 sec) #####(4)表无法创建comment 这个问题导是不大,但在从mysqll导数据时得需要单独处理。期待sequoiadb 能够支持更完善。 root 10:57: [(none)]> use sbtest Database changed root 10:57: [sbtest]> alter table sbtest2 comment = 'xxx'; ERROR 65530 (HY000): Failed to parse comment: 'xxx' #####(5)事务支持 事务测试,安装好后,默认是不支持事务的,如果开启事务后执行语句,会报错,然后再执行sql时,已经不是事务了。 root 17:25: [sbtest]> start transaction -> ; Query OK, 0 rows affected (0.00 sec) root 17:25: [sbtest]> update sbtest1 set c='xxxddddx' where id = 1059; ERROR 1030 (HY000): Got error 40253 from storage engine root 17:25: [sbtest]> update sbtest1 set c='xxxddddx' where id = 1059; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 root 17:25: [sbtest]> commit; Query OK, 0 rows affected (0.00 sec) 如果需要支持事务,需要需要程序在启动时加--transactionon true参数。 1、在配置文件:/opt/sequoiadb/conf/local/端口号/sdb.conf中增加transactionon=true 参数,然后重启节点。 2、也可以执行如下命令行后,再重启节点 db=new Sdb('localhost',11810) db.updateConf({transactionon:TRUE}) **注意:**默认的事务隔离级别是RU,读未提交。如需要可以将事务隔离级别调整成RC,读提交。sequoiadb只支持这两种事务隔离级别。 配置调整方法和开启事务一样:在配置文件中增加transisolation=1,或者执行如下命令: db=new Sdb('localhost',11810) db.updateConf({transisolation:1}) 然后再重启节点。 官方提到事务如下说明,也就是说,开启事务后,其它连接都无法访问正事务正在更新的文档。 事务是由一系列操作组成的逻辑工作单元。在同一个会话(或连接)中,同一时刻只允许存在一个事务,也就是说当用户在一次会话中创建了一个事务,在这个事务结束前用户不能再创建新的事务。 事务作为一个完整的工作单元执行,事务中的操作要么全部执行成功要么全部执行失败。SequoiaDB事务中的操作只能是插入数据、修改数据以及删除数据,在事务过程中执行的其它操作不会纳入事务范畴,也就是说事务回滚时非事务操作不会被执行回滚。如果一个表或表空间中有数据涉及事务操作,则该表或表空间不允许被删除。 测试: session 1:开启一个事物,并更新一条记录,不提交 root 11:16: [sbtest]> begin; Query OK, 0 rows affected (0.00 sec) root 11:17: [sbtest]> update sbtest2 set d = 'update' where id = 5530; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 session 2: 去查这条记录,发现被阻塞,ctrl+c无法正常退出 root 11:15: [(none)]> use sbtest Database changed root 11:15: [sbtest]> select * from sbtest2 where id = 5530; ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted ^C^C -- query aborted session 1:回滚事务 root 11:17: [sbtest]> rollback; Query OK, 0 rows affected (0.00 sec) session 2:退出,报异常(原因是按了ctrl+c,如果没有按这个查询能正常查询出结果) ERROR 1317 (70100): Query execution was interrupted 事务开启后,读其它连接、会话是可以正常操作其它记录的,也可以开启事务。 总结: 1、事务中对记录的变更,其它任务并发请求变更中的记录时,会被阻塞,也说明所有的读都是当前读 2、事务不支持MVCC,不支持快照读 3、这也是与Tidb最不同的一点(sequoiadb 是一个NoSQL,只是上层加了一层SQL协议层,也就是把sequoiadb当作mysql的一个存储引擎)
文章最后更新时间: 2019年01月15日 11:34:11
分类文章统计
Python基础(10)
Django(5)
Flask(1)
Python常见错误(3)
Linux基础(6)
shell(11)
linux排障(4)
虚拟化(1)
Consul(3)
SequoiaDB(2)
TiDB(4)
Redis(2)
oracle(10)
MySQL(64)
ProxySQL(7)
常用软件(2)
硬件排障(2)
JavaScript(1)
HTML(1)
我们的作品(18)
windows(1)
总结(1)
按年文章统计
2013(43)
2014(19)
2015(25)
2016(6)
2017(30)
2018(7)
2019(17)
2020(4)
2021(4)
2023(1)
2024(3)
老版入口
亲,扫我吧!
友情链接
飞哥的:imbusy.me/
冰川的:www.mindg.cn
海洋的:hiaero.net
宏斌的:techindeep.com
若水的:nosa.me
段郎的:sixther.me
肥客联邦:fk68.net