亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

關于Cassandra與Thrift在int/text/varint上的曖

系統 2050 0

近期簡單寫了一個基于Cassandra/C++的日志緩存,雖然是Nosql,但是在實際應用中,還是期望能有部分的臨時CQL統計 或+-*/可以支持

所以在針對部分字段入庫時,選擇了作為整形錄入,于是麻煩就來了。

1,第一個碰到的是?Not enough bytes to read value of component 0

? ? 經過百般測試發現在建表時的WITH COMPACT STORAGE干擾最大。當去掉該語句時,Thrift程序寫入會報錯,cql執行會通過。翻閱官網HANDBOOK后發現,

也許是出于節省磁盤空間的出發點,在2.0以后cql界面建表不再自帶該參數,cli界面建表自動帶上該參數。

根據官網解釋,如果是復合主鍵的Column記錄一起存儲(或者說是打包存儲),獨立在外的Column記錄單獨存儲(或者說是散列存儲)。

話說回來,不管哪種DB,復合KEY用多了性能都會下降,同時有違P2P精神,也無法體現出cas強大的隨機寫。

2,第二個碰到的是?Exception: Default TException. ?[Expected 4 or 0 byte int (1)]

? ? 惡心的事情來了:

? ? 正常建表全Column都是text,程序負責外部擦屁股,Thrift和cas之間相安無事。

? ? 某Column設定為int,cas的cql正常使用,但Thrift開始跟你搞了,報這個錯給你看。

按cas源碼column定義為:

?

97 std::string name;
98 std::string value;
99 int64_t timestamp;
100 int32_t ttl;

按thrift源碼column定義為:

71 struct Column {
72 1: required binary name,
73 2: optional binary value,
74 3: optional i64 timestamp,
75 4: optional i32 ttl,
76 }

也就是string 轉 binary有thrift完成,這一轉轉出一些道道:

但我們這樣去寫時會報錯

sstemp.clear();
sstemp<<i;
sstemp>>key;

c.name="age";
c.value=i;
cass.insert(key,cparent,c,ConsistencyLevel::ONE);

?

改成這樣去寫

sstemp.clear();
sstemp<<i;
sstemp>>key;

c.name="age";
c.value="0021"; //必須4個字符
cass.insert(key,cparent,c,ConsistencyLevel::ONE);

雖然寫進去了,但是新問題出現了,轉就老老實實轉,偏偏對字節進行了拆分補位。。。。

關于Cassandra與Thrift在int/text/varint上的曖昧

這就沒法看了,那為什么會這樣?將808464945放到calc中看一下,發現高位4bit被補了0011

關于Cassandra與Thrift在int/text/varint上的曖昧

也就是 0011 0000 0011 0000 0011 0010 0011 0001

如果按初始值就是? 0011 0000? 0011 0000? 0011 0000? 0011 0000 按照 2^N SUM,初始值變為了808464432。

繼續翻了thrift源碼【/root/soft/thrift-0.9.1/lib/cpp/src/thrift/transport】好久,無果,放棄。

這樣做意味著寫的時候被搞了一把,讀的時候,還的再搞一把,而且只能4個字節或者0字節,也就是程序只能寫0~9999的整數。這樣做顯然不合適。

由于insert的源碼寫的很清楚了,都是封裝的對象,不再會有第二種insert 所以,嘗試了cas的另外一個datatype:varint

官網解釋:精度整形 varint。

依舊是這套寫代碼,但是value我們不做string ,直接改int賦給string,于是,果然各種強。

關于Cassandra與Thrift在int/text/varint上的曖昧

?

至此,搞定了兩大數據類型text和int,雖然還是有不少問題有待查證,但是應付一個TASK也算馬馬虎虎了。 ?

?PS:環境?cqlsh 4.1.0 | Cassandra 2.0.2 | CQL spec 3.1.1 | Thrift protocol 19.38.0?

關于Cassandra與Thrift在int/text/varint上的曖昧


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国语自产偷拍精品视频偷最新 | 成人精品一区二区www | 啪啪网站免费 | 四虎国产精品一区二区 | 乱子伦xxx欧美 | 久热国产精品视频 | 国产精品九九九久久九九 | 亚洲一区在线日韩在线深爱 | 成人高清毛片a | 久久久夜色精品国产噜噜 | 亚洲精品区在线播放一区二区 | 欧美性猛交xxx嘿人猛交 | 国产精品成人一区二区三区 | 99视频有精品 | 欧美色操| 亚洲一区二区三区高清不卡 | 五月天精品 | 视频一区国产精戏刘婷 | 色吧色吧色吧网 | 午夜影院在线 | 有色视频在线观看 | 老司机午夜免费 | 久草视频资源在线 | 曰本一级毛片免费播放 | a亚洲欧美中文日韩在线v日本 | 99视频免费看 | 国产午夜亚洲精品第一区 | 国产手机精品一区二区 | 综合久久久久久久综合网 | 日韩综合一区 | 欧美色欧美亚洲高清在线观看 | 欧美另类交视频 | 视频一区欧美 | 91在线免费看 | 成年人视频在线免费 | 美女羞羞网站 | 四虎黄色网 | 二级片毛片 | 久久99国产精品久久99无号码 | 愉拍自拍| 国产一区二区福利久久 |