Эффективно фильтровать большое количество объектов хранилища данных с большим количеством значений свойств - PullRequest
0 голосов
/ 23 июля 2010

В моем хранилище данных App Engine у ​​меня есть тип объекта, который может содержать большое количество объектов, каждый из которых будет иметь свойство customer_id. Например, предположим, что заданный customer_id имеет 10 000 объектов, а 50 000 customer_id.

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

Ниже я перечислил мои текущие модели хранилищ данных. «Отчеты» относятся к наборам customer_ids, поэтому, продолжая приведенный выше пример, я могу получить свои 2000 customer_ids из ReportCids.

class Users(db.Model):
  user = db.StringProperty()
  report_keys_list = db.ListProperty(db.Key)

class Reports(db.Model):
  #report_key
  report_name = db.StringProperty()

class ReportCids(db.Model):
  report_key_reference = db.ReferenceProperty(Reports, collection_name="report_cid_set")
  customer_id = db.IntegerProperty()
  start_timestamp = db.IntegerProperty()
  end_timestamp = db.IntegerProperty()

class CustomerEvent(db.Model):
  customer_id = db.IntegerProperty()
  timestamp = db.IntegerProperty()
  event_type =  db.IntegerProperty()

Варианты, которые я рассмотрел:
Выполнить отдельный запрос для каждого customer_in в моем наборе 2000
-Используйте списки ключей, указывающих события клиента, но это не более 5000 записей в списке (поэтому я прочитал)
-Получить все записи и отфильтровать в моем коде

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

Конечно, с удовольствием предоставлю любые разъяснения или информацию, если это поможет.
Большое спасибо!

1 Ответ

0 голосов
/ 23 июля 2010

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

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

Вот что я пытаюсь сделать: я пытаюсь сделать отчет, который показывает для нескольких идентификаторов клиентов события, которые произошли для этой группы клиентов.Допустим, у меня есть отчет для просмотра информации для 2000 клиентов.Я хочу иметь возможность получить все события (CustomerEvent), а затем отфильтровать это по типу события.Я, вероятно, задаю здесь много вопросов, но я надеялся получить все эти события для 2000 клиентов, а затем выполнить фильтрацию event_type во внешнем интерфейсе, чтобы пользователь мог динамически настраивать event_type, который он хочет просмотреть.и получить некоторую информацию об успешных действиях для этого типа событий.

Так что моя главная проблема заключается в эффективном извлечении нужных сущностей из CustomerEvent.

Сейчас я собираю список клиентовИдентификаторы вроде этого:

cid_list = []  
this_report = models.Reports.get(report_key)  
if this_report.report_cid_set:  
  for entity in this_report.report_cid_set:  
    cid_list.append(entity.customer_id)  

Моя оценка 10 000 объектов CustomerEvent была довольно высокой, но теоретически это могло произойти.Возможно, когда я пойду, чтобы получить результаты отчета, я смог сразу отфильтровать по типу события, указанному пользователем.Это означает, что мне приходится возвращаться в хранилище данных каждый раз, когда они выбирают новый вариант, который не идеален, но, возможно, это мой единственный вариант, учитывая эту настройку.

Большое спасибо за то, что нашли время посмотретьна это!

...