Nano Hash - криптовалюты, майнинг, программирование

Дублирование хранилища сообщений для систем обмена сообщениями

Во многих проектах подсистем для приложений обмена сообщениями (твиттер, фейсбук и т. д.) я замечаю дублирование того, где хранится история сообщений пользователя. С другой стороны, они используют индексатор токенизации, такой как ElasticSeach или Solr. Это хорошо для поиска. С другой стороны, все еще используйте какую-то БД для истории. Зачем дублировать? Почему один и тот же экземпляр ES/Solr/EarlyBird нельзя использовать для истории? На самом деле умеет.


Ответы:


1

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

Первичным источником правды может быть не обязательно реляционная СУБД, и они не обязательно «дублируют» данные в том смысле, в каком вы имели в виду, это может быть все, что имеет копию ваших данных и позволяет вам перестроить ваши индексы ES в случае что-то идет не так. Я видел много-много разных "источников правды". Это может быть просто:

  • ваши необработанные плоские файлы, содержащие ваши исторические журналы или бизнес-данные
  • Темы Кафки, которые вы можете легко воспроизвести в любое время
  • снимок, который вы регулярно делаете из ES
  • реляционная БД
  • вы называете это ...

Дело в том, что если по какой-либо причине что-то пойдет не так (а такое случается), вы захотите иметь возможность воссоздать свои индексы ES, будь то из реальной БД, из резервных копий или из необработанных данных. Вы должны рассматривать это как подстраховку. Даже если все, что у вас есть, это база данных MySQL, у вас обычно есть ее резервная копия, поэтому вы уже каким-то образом «дублируете» данные.

Одна вещь, о которой вам нужно подумать, однако, при проектировании вашей системы, заключается в том, что вам может не обязательно храниться все ваши данные в ES, поскольку ES — это поисковая и аналитическая система, вы должны хранить там только то, что есть. необходимые для поддержки ваших потребностей в поиске и аналитике, и иметь возможность воссоздать эту информацию в любое время. В конце концов, ES — это просто подсистема всей вашей архитектуры, такая же, как ваша БД, ваша очередь сообщений или ваш веб-сервер.

Также стоит прочитать: Использование ElasticSeach в качестве основного источник части моей БД

13.01.2019
  • Спасибо, Ваша аналитика просто превосходна! Еще один момент: вы упомянули переигрывание тем Кафки. Считаете ли вы, что полное хранилище истории в Kafka является хорошей практикой в ​​таких сценариях? 14.01.2019
  • Круто, рад, что помогло! Да, в некоторых случаях может иметь смысл иметь полные необработанные данные в теме Kafka, которые вы можете легко воспроизвести. 15.01.2019

  • 2

    Обычная проблема заключается в следующем: вы хотите выполнить поиск, а в идеале попробовать проиндексировать данные другим способом (например, стереть индекс и попробовать новый отличный анализатор, который вы изначально забыли включить). Разделение источника данных и индекса друг от друга делает систему менее связанной. Вы не боитесь, что потеряете данные в Elasticsearch/Solr.

    Обычно я категорически против того, чтобы называть Elasticsearch/Solr базой данных. Поскольку на самом деле это не. Например, ни один из них не поддерживает транзакции, что усложняет вашу жизнь, если вы хотите обновить несколько документов, следуя стандартной реляционной логике.

    И последнее, но не менее важное: одной из самых сложных операций в Elasticsearch/Solr является извлечение сохраненных значений, так как он не очень оптимизирован для этого, особенно если вы хотите вернуть 10 тысяч документов одновременно. В этом случае также поможет отдельный источник данных, так как вы сможете вернуть только совпадающие документы с идентификаторами из Elasticsearch/Solr, а затем получить необходимое содержимое из источника данных и вернуть его в пользователь.

    Резюме простое: Elasticsearch/Solr следует рассматривать скорее как поисковые системы, а не как хранилище данных.

    13.01.2019
  • Спасибо за хороший полезный ответ! Я ожидаю, что авторы ES/Solr серьезно отнесутся ко всем этим факторам (очень важным), если только они не намерены оставаться в зоне отсутствия БД, потому что это действительно дублирование массивных данных. Что касается транзакций для необработанных текстов, кстати, я чувствую, что нужно пересмотреть дизайн, если это нужно, но кто знает... 13.01.2019
  • @user1439579 user1439579, честно говоря, я не уверен, что они должны. Совершенно нормально, что Elasticsearch/Solr занимают свою нишу и не пытаются быть всем. 13.01.2019
  • но с точки зрения клиента они должны удвоить ресурсы 13.01.2019
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..