来自 Redis,我喜欢你可以将任何二进制 blob 放在 Redis 中,它只是被视为一个字符串。这是可能的,因为 Redis 字符串就是他们所说的“二进制安全”。这使得在字符串编码的二进制数据之上执行范围查询之类的事情成为可能,这对于位集操作等非常有用。
我正在调查Riak,到目前为止我很喜欢。Riak 似乎有范围查询,但我不确定 Riak 中的字符串在上述意义上是否是“二进制安全的”。如果没有,是否有另一种方法可以在 Riak 中存储二进制数据,并且仍然可以快速对它们进行范围查询?
谢谢
来自 Redis,我喜欢你可以将任何二进制 blob 放在 Redis 中,它只是被视为一个字符串。这是可能的,因为 Redis 字符串就是他们所说的“二进制安全”。这使得在字符串编码的二进制数据之上执行范围查询之类的事情成为可能,这对于位集操作等非常有用。
我正在调查Riak,到目前为止我很喜欢。Riak 似乎有范围查询,但我不确定 Riak 中的字符串在上述意义上是否是“二进制安全的”。如果没有,是否有另一种方法可以在 Riak 中存储二进制数据,并且仍然可以快速对它们进行范围查询?
谢谢
既然您提到“范围查询”,我假设您在谈论 Riak 时是指 2i(二级索引)。
Riak 中的_bin二级索引键存储为普通的旧字节,排序(对于范围)是逐字节比较。
大多数人使用 UTF-8/ISO-8859-1 字符串作为_bin索引中的键,但这不是必需的。
但是请注意,目前 HTTP API 在这方面有些笨拙。这个 SO question 详细介绍了这一点:Riak 中的 URL-unsafe Secondary Index names do not work
使用协议缓冲区,您可以只向它抛出字节,它并不关心。
也就是说,我们当前的客户目前相当以 UTF-8 为中心。具体来说,Java 客户端期望索引值是 UTF-8 字符串。这将在 2.0 版本中得到解决。