0

Я понимаю, что NDB/Google Datastore не поддерживает тип данных бит и поддерживающие операторы.Шаблон проектирования для реализации данных бит/оператора в NDB

Но есть ли у кого-нибудь предложения обходные пути.

Мои данные - это дерево категорий, и пользователь может выбрать несколько категорий. Идеальная реализация заключалась бы в том, чтобы хранить как один номер и выполнять поразрядную операцию, чтобы найти совпадение.

Кроме того, кто-нибудь знает дорожную карту NDB/Datastore? Заранее спасибо.

+1

Пожалуйста, не кричите. Спасибо. – bernie

+0

Это запах преждевременной оптимизации. – jterrace

ответ

1

Если вам нужна побитовая поддержка, bitstring - отличная библиотека (версия 2.2 работает с patch). Тем не менее, вы не сможете запросить на основе отдельных битов, а всего всего битрейта в целом.

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

Помните, что большая часть затрат исходит от чтения и записи. Запросы дешевы, если вы ограничиваете количество объектов, которые вы получаете каждый раз; не имеет значения, есть ли у вас 100 или 1 000 000 объектов такого рода.

GAE требует некоторых готовых размышлений, когда дело доходит до хранения данных (здесь денормализация иногда является хорошей вещью). Я советую читать документы хранилища данных сверху вниз, чтобы вы получили глубокое понимание того, как работают запросы и индексы. Также есть презентация ввода-вывода Google о том, как она работает под капотом.

Как указано в jterrace, иногда вам нужно задаться вопросом, было ли время, проведенное , разработкой, оптимальным решением является более чем дополнительная стоимость менее эффективного, но более простого решения.

+0

И то, что кажется оптимальным решением на одной платформе, может быть не в другом случае - в случае битбитовых точек и индексируемости/возможности поиска на appengine ;-) –

+0

Cool Спасибо mil! Повторное свойство - я этого не знал! Круто! Это должно сработать! О готовом мышлении .. Очень верно ... Я делал нормализованный дизайн SQL целую вечность. GAE действительно требует некоторой перекомпоновки на моем конце. Спасибо, мил! –

+0

Просто будьте осторожны с повторяющимися свойствами. Если в ваших запросах задействовано несколько повторяющихся свойств, вы можете столкнуться с взрывоопасными индексами (они так же страшны, как они звучат). [Читать дальше] (https://developers.google.com/appengine/docs/python/datastore/indexes#Index_Limits) – jdiaz5513