Google应用引擎上的关键空间结构如下 香蕉a3fadawsgdg 香蕉hrgsgsgsdgs 香蕉regsgsdgsgg 番茄fsfg33424ff 番茄dsfgsgasdgs
即。有一个类型和一个独特的部分编码成一个字符串(不是这不是GAE类型,它是我们组成的类型)。 现在的问题是如何使用GAE范围查询检索所有banana -......键。
为此我需要尽可能低的键,可能是'banana-00000000000'和最高的键,也许'bananna-zzzzzzzzzz'。但是,由于存在unicode,因此可能必须使用更加有趣的代码点。并且,由于这是一个引人注目的问题,因此请求而不是盲目地尝试。
答案 0 :(得分:3)
您可能不需要知道最高密钥。
对于范围查询,您可以使用banana.
作为上限(.
是紧跟在-
之后的ASCII / unicode字符。)
如果你确实需要知道最高可能的密钥,那么首先它取决于第二部分允许的字符数(如果它是变量然后选择它可能的最大数字),那么IIRC 0xFFFF可以合法地出现在UCS-2中/ UTF-16,但不是定义的代码点,因此可能会被拒绝。所以试试而不是z
,如果它有效,那么它就可以了。失败的U+FFFD
(替换字符)可能足够接近BMP的顶部,因为故意取消分配U+FFFE
以便BOM U+FEFF
可用于指示字节序。
我不知道数据存储区是否/如何处理密钥字符串比较中的非BMP代码点。
答案 1 :(得分:1)
不确定它在Java中的外观,但在GQL / python中:
gql = "SELECT * FROM MyObj WHERE __key__ >= Key('MyObj', :1) " + \
"AND __key__ <= Key('MyObj', :2)"
query = db.GqlQuery(gql, 'banana-', u'banana-' + u'\ufffd')
会将banana-
与banana-Z...Z
匹配(然后再匹配一些)。
我更有可能使用filter syntax。