将 bitcask 与 riak 一起使用,我有明确定义的键名,我正在使用键过滤器在 map-reduce 查询中进行过滤。这是一个使用带有 bitcask 的关键过滤器来实现 2i 功能的实验(然后使用二级索引与使用关键过滤器比较我的应用程序的性能)。
给定一个包含其名称格式的键的存储桶,version_type_user_timestamp
我最终得到如下所示的键。
GET /riak/my_example_bucket?keys=stream HTTP/1.1
Host: localhost
Accept: application/json
{
"keys": [
"v0.3_demo.type.1_user12345_1375315200000",
"v0.3_demo.type.1_user10000_1375315200973",
"v0.3_demo.type.4_user00288_1375315101004",
...
]
}
{
"keys": [
"v0.3_demo.type.2_user12777_1375315211000",
"v0.3_demo.type.1_user12777_1375315211782",
"v0.3_demo.type.2_user50121_1375315101004",
...
]
}
...
我正在构建如下所示的关键过滤器。这个想法是通过事先按键过滤结果来减少值查找。
{
"bucket": "my_example_bucket",
"key_filters": [
[
"or",
[
[
"tokenize",
"_",
2
],
[
"eq",
"demo.type.1"
]
],
[
[
"or",
[
[
"tokenize",
"_",
2
],
[
"eq",
"demo.type.2"
]
],
[
[
"or",
[
"tokenize",
"_",
2
],
[
"eq",
"demo.type.3"
]
]
]
]
]
]
]
}
这种技术有效,但请注意它如何标记每个["or", [...], [...]]
子句的键。我的假设是,如果我可以标记一次并将结果输入到or
子句管道中,所有测试接受的标记变体,那么 map-reduce 查询的关键过滤器将做更少的工作(因此映射的过滤部分-reduce 查询将花费更少的时间)。
我试过像下面这样格式化请求,但这似乎不起作用。
{
"bucket": "my_example_bucket",
"key_filters": [
[
"tokenize",
"_",
2
],
[
"or",
[
"eq",
"demo.type.1"
],
[
"or",
[
"eq",
"demo.type.2"
],
[
"eq",
"demo.type.3"
]
]
]
]
}
有没有办法在不重新标记每个or
子句的情况下做到这一点?