5

У нас есть приложение Java, работающее на движке Google. Имея вид, называемый Контакт. Ниже приведен пример схемыЛучший способ разработки приложений и моделирования текстового поиска приложений

Contact 
{ 
    long id 
    String firstName 
    String lastName 
    ... 
} 

выше является existig модель, для поддержки нескольких требований мы храним этот объект как в хранилище данных и поиска текста

Теперь мы хотим интегрировать контакты с данными просмотров страниц.

Каждый контакт может иметь тысячи просмотров страниц записей или даже миллионы для некоторых контактов

Ниже приводится образец посещения страницы объект [Примечание: Мы не имеем этот объект как сейчас, это просто дать информацию о посетите страницу]

PageVisit 
{ 

    long id 
    String url 
    String refUrl 
    int country 
    String city 
    .... 
} 

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

напр:

select * from Contact where firstName = 'abc' and url = 'cccccc.com'; 
select * from Contact where firstName = 'abc' or url = 'cccccc.com'; 

Чтобы написать такие запросы, нам нужны как свойства контактного ядра, так и их посещаемая страница должны быть доступны в самом Contact-объекте, но контакт может иметь огромное количество просмотров страниц. Таким образом, это превысит ограничение максимального размера сущности

Так как проектировать контактную модель в подобной ситуации как в хранилище данных, так и в текстовом поиске.

Благодаря

ответ

1

Облако Datastore не поддерживает соединения, так что вам нужно будет справиться с этим каким-то образом из клиентского кода.

2 возможных способа обработки этого:

Денормализовать Контактной вам нужно искать в PageVisit:

PageVisit 
{ 

    long id 
    String firstName // Denormalized from Contact 
    String url 
    String refUrl 
    int country 
    String city 
    .... 
} 

Для этого необходимо создать составной индекс:

- kind: PageVisit 
    ancestor: no 
    properties: 
    - name: firstName 
    - name: url 

Или выполнить несколько запросов

select id from Contact where firstName = 'abc' 

select * from PageVisit where contactId={id} and url = 'cccccc.com'; 
select * from PageVisit where contactId={id} or url = 'cccccc.com'; 

Для этого необходимо создать составной индекс:

- kind: PageVisit 
    ancestor: no 
    properties: 
    - name: contactId 
    - name: url 

Окончательной сторону: В зависимости от того, насколько велика вашего сайта, это может быть стоит посмотреть в облаке Bigtable для данных показа страницы. Это лучшее решение для высокой загрузки OLAP-рабочих нагрузок.

Смежные вопросы