Какова максимально возможная ключевая строка в запросе диапазона в GAE / J? - PullRequest
1 голос
/ 10 апреля 2011

Пространство ключей в Google App Engine структурировано как банан-a3fadawsgdg банан-hrgsgsgsdgs банан-regsgsdgsgg томат-fsfg33424ff томат-dsfgsgasdgs

т.е. есть тип и уникальная часть, закодированные в одну строку (нет, это не вид GAE, это тип, который мы составили). Теперь вопрос заключается в том, как получить все банановые ключи с помощью запроса диапазона GAE.

Для этого мне нужен самый низкий из возможных ключей, возможно, «banana-00000000000» и самый высокий из возможных ключей, возможно, «bananna-zzzzzzzzzz». Однако, поскольку есть Unicode, возможно, придется использовать более забавные кодовые точки. И, поскольку это appengine, имеет смысл спрашивать, а не пытаться вслепую.

Ответы [ 2 ]

3 голосов
/ 10 апреля 2011

Возможно, вам не нужно знать максимально возможный ключ.

Для запроса диапазона вы можете использовать banana. в качестве верхней границы (. - ASCII / Unicode-символ, следующий сразу за -.юридически появляются в UCS-2 / UTF-16, но не являются определенной кодовой точкой, поэтому могут быть отклонены.Так что попробуйте вместо z, и если это работает, то это работает.В противном случае U+FFFD (символ замены), вероятно, достаточно близок к вершине BMP, поскольку U+FFFE преднамеренно не назначен для того, чтобы спецификация U+FEFF могла использоваться для указания порядкового номера.Я не знаю, обрабатывает ли Datastore кодовые точки, отличные от BMP, при сравнении строк ключей.

1 голос
/ 10 апреля 2011

Не уверен, как это будет выглядеть в 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 (а затем и некоторым).

Я с большей вероятностью использую синтаксис фильтра .

...