Шаблон проектирования для реализации битовых данных/оператора в NDB

Я понимаю, что NDB/Google Datastore не поддерживает битовый тип данных и поддерживающие операторы.

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

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

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


person Rohit Krishnan    schedule 12.03.2013    source источник
comment
Пожалуйста, не кричи. Спасибо.   -  person mechanical_meat    schedule 12.03.2013
comment
Это пахнет преждевременной оптимизацией.   -  person jterrace    schedule 12.03.2013


Ответы (1)


Если вам нужна побитовая поддержка, bitstring — отличная библиотека (работает версия 2.2 с патч). Однако вы не сможете запрашивать отдельные биты, а только всю битовую строку в целом.

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

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

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

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

person jdiaz5513    schedule 13.03.2013
comment
И то, что кажется оптимальным решением на одной платформе, может не иметь места на другой - дело в битовых полях и индексируемости/поиске на appengine ;-) - person Tim Hoffman; 13.03.2013
comment
Круто! Большое спасибо! Повторное свойство - я этого не знал! Прохладный! Это должно сработать! О нестандартном мышлении.. Совершенно верно... Я много лет занимаюсь дизайном нормализованного SQL.. GAE требует некоторой переделки с моей стороны.. Большое спасибо! - person Rohit Krishnan; 13.03.2013
comment
Просто будьте осторожны с повторяющимися свойствами. Если ваши запросы включают более одного повторяющегося свойства, вы можете столкнуться с взрывными индексами (это так же страшно, как и звучит). Подробнее... - person jdiaz5513; 13.03.2013
comment
Спасибо.... Буду иметь в виду. К счастью, пока моя таблица не требует более одного повторяющегося свойства. Я посмотрю, как это сыграет. предупреждение отмечено - person Rohit Krishnan; 28.03.2013