Google AppEngine: как считать записи базы данных вне 1 000?

Сначала вы должны проверить формат, используемый для инструкции ori:

0011 01ss ssst tttt iiii iiii iiii iiii

Источник: Справочник инструкций MIPS

  • sssss регистр назначения, который является $8 = 01000
  • ttttt регистр источника, который является $6 = 00110
  • ii... непосредственным операндом, который является 0x20 = ...10 0000 [1117 ]

Полученная инструкция выглядит следующим образом:

0011 01ss ssst tttt iiii iiii iiii iiii
0011 0101 0000 0110 0000 0000 0010 0000

, которую мы конвертируем в шестнадцатеричное для использования в нашем коде: 0x35060020

, поскольку инструкция ori принимает 16 бит для непосредственного операнда, мы можем объединить его с простым сдвигом влево, чтобы заполнить старшие 16 бит сначала 0x3506, а затем добавить младшие 16 бит другой командой ori.

ori $9, [112], 0x3506 # insert upper 16 bits of instruction
# 0000 0000 0000 0000 0011 0101 0000 0110

sll $9, $9, 0x10   # shift 16 bits to higher part of register
# 0011 0101 0000 0110 0000 0000 0000 0000

ori $9, $9, 0x0020 # insert lower 16 bits of instruction
# 0011 0101 0000 0110 0000 0000 0010 0000

12
задан Community 23 May 2017 в 12:20
поделиться

4 ответа

It is indeed a duplicate and the other post describes how to theoretically do it, but I'd like to stress that you should really not be doing counts this way. The reason being that BigTable by its distributed nature is really bad for aggregates. What you probably want to do is add a transactional counter to that entity, and if there are lots of transactions a sharded counter. See: http://code.google.com/appengine/articles/sharding_counters.html

UPDATE: Since 1.3.1 cursors make stuff like this a lot easier: http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Query_Cursors

14
ответ дан 2 December 2019 в 19:32
поделиться

Используйте нумерацию страниц, как в этих примерах здесь .

2
ответ дан 2 December 2019 в 19:32
поделиться

Я написал этот метод для подсчета запросов, но, как сказал Ник Джонсон, возможно, это плохая идея ...

def query_counter (q, cursor=None, limit=500):
  if cursor:
      q.with_cursor (cursor)
  count = q.count (limit=limit)
  if count == limit:
      return count + query_counter (q, q.cursor (), limit=limit)
  return count
0
ответ дан 2 December 2019 в 19:32
поделиться

Начиная с версии 1.3.6 SDK ограничение в 1000 для функции подсчета было удалено. Таким образом, вызов функции count теперь будет возвращать точное количество сущностей, даже если их больше 1000. Единственным ограничением было бы, если бы у вас было так много сущностей, что функция count не вернет до истечения времени ожидания запроса.

2
ответ дан 2 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: