Хранение данных: «группировка» сущностей по значению свойства? (как словарь / карта?) - PullRequest
1 голос
/ 19 февраля 2012

Использование хранилища данных AppEngine, но это может быть независимым, не знаю.

Предположим, что объект базы данных называется Comment.Каждый Comment принадлежит User.Каждый Comment имеет свойство date, довольно стандартное на данный момент.

Я хочу кое-что, что позволит мне: указать User и вернуть словарь-иш (исходя из фона Python, проститеХеш-таблица, карта, однако она должна называться в этом контексте) структура данных, где:

  • ключи: каждые date, появляющиеся в комментарии User
  • значения: Comments, которые были сделаны date.

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

Есть ли способ / инструмент / техника для этого?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

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

  1. Родитель (Пользователь) имеет свойство списка, содержащее ключи дочерних объектов (Комментарий).

  2. Child имеет ключевое свойство, указывающее на Parent.

Поскольку вам необходимо ограничить количество комментариев по дате, лучше всего использовать второй вариант. Затем вы можете запросить комментарии, у которых дата = somedate (или диапазон дат) и где user = someuserkey.

В Datastore нет встроенной функции группирования, поэтому для «группировки» по дате можно добавить в запрос сортировку по дате. Чем когда вы перебираете результат, когда дата изменяется, вы можете использовать / сохранить ее как ключ группировки.

Обновление

Проектирование баз данных no-sql должно быть ориентировано на доступ (в отличие от datamodel в sql): для часто используемых операций вы должны получать данные как можно дешевле (= как можно меньше операций).

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

0 голосов
/ 20 февраля 2012

Я бы начал с того, что вы не должны извиняться за то, что у вас есть фон Python. App Engine начал поддерживать только Python. Используя модуль db, вы можете использовать сущность User в качестве родителя нескольких сущностей DailyCommentBatch, каждый из которых является родителем пары сущностей Comment. IIRC, при этом все связанные объекты будут храниться вместе (или близко).

Если вы используете NDB (мне это нравится), вы можете использовать StructuredProperty либо на уровне пользователя, либо на уровне DailyCommentBatch.

...