2015-05-18 2 views
1

Допустим, я определяю два отображения ElasticSearch, такие как:ElasticSearch: про и минусы, имеющих различные показатели для определения же отображения

"firstMapping" : { 
    "properties" : { 
     "name" : { 
      "type" : "string" 
     }, 
     "someProperty" : { 
      "type" : "string" 
     } 
    } 
} 

И

"secondMapping" : { 
    "properties" : { 
     "name" : { 
      "type" : "string" 
     }, 
     "someOtherProperty" : { 
      "type" : "string" 
     } 
    } 
} 

У меня есть два вопроса:

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

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

  2. Для каждого сопоставления один документ имеет «происхождение», либо «в реальном времени», либо «партия». Как вы, возможно, уже догадались, для каждого «пакетного» документа должен быть ровно один соответствующий «реальный» документ, каждый из которых имеет по существу одинаковые значения.

    Иными словами, в этой системе «запись» должна состоять из двух документов: «пакетного» документа и документа «реального времени», которые в остальном идентичны.

    Таким образом, наличие единого документа «партии» или «реального времени» следует считать ненормальным; следовательно, необходимо иметь простой способ сравнения «пакетных» и «реальных» данных друг с другом.

    На данный момент, каждое отображение фактически создается в двух индексов, так что

    • batchFirstMappingIndex содержит firstMapping документы «пакетного» происхождения
    • realtimeFirstMappingIndex содержит firstMapping документы «реального времени» происхождения

    (соотв. Второй).

    В качестве сопоставлений являются essentia Типы LLY, я задаюсь вопросом, будет ли это более целесообразно иметь одно отображение как для происхождения, такие как:

    "firstMappingWithOrigin" : { 
        "properties" : { 
         "origin" : { 
          "type" : "boolean" 
         }, 
         "name" : { 
          "type" : "string" 
         }, 
         "someProperty" : { 
          "type" : "string" 
         } 
        } 
    } 
    

    (соотв.secondMapping) с false значением "партии" и true значение для "реального времени"

Чтобы подытожить с, я в настоящее время есть 4 ресурсы в 4 отдельных индексов:

  • batchFirstMappingIndex/firstMapping
  • realtimeFirstMappingIndex/firstMapping
  • batchSecondMappingIndex/secondMapping
  • realtimeSecondMap pingIndex/secondMapping

Я думаю, что мы могли бы легко иметь только 2 ресурсы только в одном индексе:

  • myIndex/firstMappingWithOrigin
  • myIndex/secondMappingWithOrigin

Каковы преимущества и недостатки обоих решений? Каковы наилучшие обоснования для второго подхода?

Для обоих вопросов, я особенно обеспокоен:

  • чтения (генерирующего агрегатов на лету) и записи
  • обслуживания индекс (добавление/удаление/изменение Отображения свойств, например)
  • сравнения «партии» и «данные в реальном времени»
+1

Я думаю, что следующая статья людей ES должна пролить свет на это: https://www.elastic.co/blog/index-vs-type Также обратите внимание, что «удаление свойств» невозможно в ES и " изменение свойств "ограничивается только совместимыми изменениями. – Val

+0

@Val Я думаю, вы должны на самом деле сделать свой комментарий ответом, я бы определенно принял его. –

ответ

1

следующая статья по людям ES должен пролить некоторый свет на это: http://elastic.co/blog/index-vs-type

Также обратите внимание, что «удаление свойств» в ES невозможно, а "modifying properties" ограничивается только совместимыми изменениями.

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