nebula 2.0 storaged 写入报错,日志内容
E1217 11:16:28.660177 54336 AddVerticesProcessor.cpp:62] Space 1, vertex length invalid, space vid len: 150, vid is id_name|丨冫冫γ1,:广八一一‘卜卜厂一?广一l冶一一人广一l冶一一人厂一斗一𠂆个r冷三一广一一川Y上i氵。。一一一片一夕冷一一一一一一丫一1一一一一;!一一卜一一水一丫兴一上 一一一一一冶
这个字段的长度定义是fix(100) 我计算了下这个字符的长度是100啊,怎么变成150了?是因为nebula编码导致的?
怎么算的100
150是space的限制长度
150是创建space时定的vid长度
CREATE SPACE my_space_4(vid_type = FIXED_STRING(150))
100是创建属性时字符串的长度
CREATE TAG t5(p1 fixed_string(100) NOT NULL, p2 int, p3 int DEFAULT NULL)
desc space看看
这个字段的长度定义是fix(100)
这个我说错了,space限定是150长度,如下图所示
现在我插入的vid的length不是才100,还没超过150,这个怎么就报错了?
上面显示的
这个不是string么,直接取length,计算就是100
在上面
可能编码不一样,用nebula的长度函数算一下呢, YIELD length()
用nebula的length函数计算出来不一样
那这个怎么处理?我java代码里面的用string的长度计算确实100
上面
嗯nebula这里的string目前基本是一个bytes的语义,算的还是字节长度。和java里面字符长度还是不一样的。
那你这个长度使用起来好难受,
string后面肯定要实现字符串的语义,包括支持各种编码等,但是space的vid长度限制是来源于底层存储的要求,这个还是要按字节来算。
也就说现在还没有实现?
那我用的话,就只能只能这么写?
@Test public void testCode() { String str= “id_name|丨冫冫γ1,:广八一一‘卜卜厂一?广一l冶一一人广一l冶一一人厂一斗一\uD840\uDC86个r冷三一广一一川Y上i氵。。一一一片一夕冷一一一一一一丫一1一一一一;!一一卜一一水一丫兴一上 一一一一一冶”; System.out.println(str.getBytes(Charset.forName(“utf-8”)).length); byte bytes = str.getBytes(Charset.forName(“utf-8”)); String s = new String(bytes, 0, 100, Charset.forName(“UTF-8”)).replaceAll(“�”, “”); System.out.println(s); }
是的总之bytes长度不能超过限制
这个在2.0 release的时候会支持吗?
目前不在计划中