2015-09-26 18 views
4

我已将JSON文件转换为CSV格式,现在使用aerospike加载器将Aerospike中的CSV加载。我可以做到这一点为简单的结构,但如何修改allDatatype.json的内容加载在Aerospike嵌套的CSV文件?如何使用aerospike loader在aerospike中加载嵌套的csv文件?

https://github.com/aerospike/aerospike-loader/tree/master/example

JSON文件

{ 
"centers" : { 
"ER" : { 
"admin":{ 
"users" : { 
    "emp1" : { 
    "password" : "abcdefgh", 
    "username" : "pankaj-roy" 
    }, 
    "emp2" : { 
    "password" : "12345678", 
    "username" : "niketan-shah" 
    } 
} 
} 
} 
} 
} 

CSV文件

centers.ER.admin.users.emp2.username,centers.ER.admin.users.emp2.password, centers.ER.admin.users.emp1.username,centers.ER.admin.users.emp1.password 
niketan-shah,12345678,pankaj-roy,abcdefgh 
+3

如果你想保留的JSON结构,为什么转换为嵌套CSV,然后加载到Aerospike。你能不能将整个JSON序列化为字节(使用protobuf或其他),并将其作为blob存储在Aerospike中? Aerospike的CSV加载器无法处理嵌套的CSV。它假定CSV是表格性质的。 – sunil

+1

如果我们将它作为blob存储在aerospike中的bin中,我将能够查询包含blob的单个bin吗? – hmims

+2

您将收到整个内容。即使您的记录有多个垃圾箱,您也可以选择一个垃圾箱。您无法查询垃圾箱的子组件。请注意,Aerospike不是一家文档商店。 – sunil

回答

3

我的理解,我必须承认是有限的,因为我才刚刚开始寻找到塞式是忘记你想将整个对象存储在一个对象中(正如上面在注释中所建议的那样,因为这更像是一个文档存储)。相反,您需要在键值术语的世界中思考它。我的理解是,你的JSON有效负载超过应贮存在塞式,像这样

Bin=users 
Set=creds 
Key=(username, "pankaj-roy") 
bin=(password, "abcdefgh") 
bin=(role, "admin")` 

那么你可以做这样的事情:

user_key = new Key("users", "creds", username); 
user_records = client.get(null, user_key); 
console.printf("username: " + user_records.getValue("username") + "\n"); 
console.printf("password: " + user_records.getValue("password") + "\n");