2015-06-24 35 views
1

已知Aerospike服務器不支持某些數據類型(如Float)。但他們在客戶端處理。例如,版本1.0.40中的Python客戶端支持使用序列化的不支持的數據類型。如何處理Aerospike中不支持的數據類型

我想知道這是如何處理的客戶端從服務器檢索數據時。我的意思是客戶端如何知道垃圾箱應該被反序列化並呈現給用戶。

如果我使用的客戶端語言不支持此功能,這將幫助我從客戶端外部進行處理。

謝謝。

回答

5

除標準數據類型以外的任何內容都將作爲python blob(內部數據類型)存儲。 Python的序列化機制用於生成字節。 Aerospike客戶端發送它發送一個python blob的事實。 Aerospike服務器也存儲這一事實,並在讀取垃圾箱時返回信息。這由客戶端解釋,如果它是一個python blob類型,它將通過python的反序列化器運行這些字節。這將重建python對象。類似的事情也在Java中完成,並使用java的序列化器/解串器存儲爲java blob。

顯然,這些python blob不能在java客戶端讀取,反之亦然。因此,在使用非本機類型時不要期望交叉語言功能。

+0

@蘇尼爾,感謝您的寶貴答覆中解釋的部分。你能解釋一下如何將你提到的「事實」發送給Aerospike服務器,並且在回讀時,如何閱讀事實。如果你能詳細解釋,會有幫助。 - 謝謝。 – Carbonrock

+0

任何人都可以幫我解決上述問題嗎?我需要如何處理Sunil上面提到的「事實」。 – Carbonrock

+0

你不需要明確地做任何事情。 Aerospike客戶端驅動程序透明地處理這個問題。客戶端驅動程序是開源的,如果你想看看它。但我不建議太過於自定義它。 – sunil

1

序列化在Python客戶端在更多的細節正上方的set_serializer方法

+0

@ Ronen。感謝您的回覆。我經歷了這些,我無法得到我需要的東西。 我需要知道關於反序列化的部分。我怎麼知道bin應該被反序列化並返回給用戶,或者它應該作爲blob返回而沒有反序列化。可能會出現這種情況,我插入了一些blob,並期望blob沒有反序列化。你能詳細解釋這個區域嗎?謝謝。 – Carbonrock

+2

如果你沒有設置自己的序列化程序,那麼一個字節數組將會保存as_bytes並且編碼爲AS_BYTES_BLOB。當您讀取該記錄時(如果您尚未設置反序列化器),任何AS_BYTES_BLOB都會變回一個字節陣列。同樣,默認序列化程序會將不支持的類型轉換爲AS_BYTES_PYTHON編碼的as_bytes,當Python客戶端讀取它時,它將反序列化回原始的Python類型。我希望你的答案。 –

+0

@ Ronen。感謝您的回覆。我認爲這個流程已經在C客戶端和python客戶端環繞C客戶端實現,並不知道這一點。有沒有辦法從Python客戶端獲取編碼類型,無論是AS_BYTES_BLOB還是AS_BYTES_PYTHON? – Carbonrock