Установить операции в хранилище данных Appengine - PullRequest
3 голосов
/ 23 февраля 2011

Полагаю, что нет хорошего способа сделать это, но если бы вам пришлось, как бы вы реализовали операции над множествами в хранилище данных Appengine?

Например, с учетом двух наборов целых чисел, как бы вы сохранили их в хранилище данных, чтобы получить хорошую производительность для операций пересечения и исключения (все те элементы в A, которых нет в B)?

1 Ответ

4 голосов
/ 23 февраля 2011

В API хранилища данных нет встроенных операций над множествами. Я вижу, у вас есть два варианта:

  1. Для небольших наборов (сотни элементов) Вам может потребоваться выполнение запросов только для ключей для набора A и набора B, а также пересечение в коде приложения. Точное определение «smallish» будет зависеть от вашего приложения.

  2. Для больших наборов (миллионов элементов) Если вы заранее знаете, какие пересечения вам нужны, вы можете вычислять их каждый раз, когда вставляете новую запись. Например, предположим, что у вас есть два набора A и B, и вы знаете, что в конечном итоге захотите выполнить запрос (A пересекается с B). всякий раз, когда вы вставляете A, проверяйте, находится ли он уже в B. Если это так, запишите этот факт где-нибудь (либо в отдельном типе сущности, либо в виде логического свойства на самом A или B). Конечно, вы должны будете сделать это и для своего B.

С опцией 1 вы можете иметь множество различных наборов, но они ограничены размером каждого набора.

С опцией 2 вы можете иметь наборы с миллионами членов, но если у вас более нескольких наборов, попытка определить все возможные перестановки наборов и операторов будет громоздкой.

...