web-dev-qa-db-fra.com

Quelle est la fiabilité d'ElasticSearch en tant que banque de données principale contre des facteurs tels que la perte d'écriture, la disponibilité des données

Je travaille sur un projet avec la nécessité de créer un tableau de bord générique dans lequel les utilisateurs peuvent effectuer différents types de regroupement, de filtrage et d’exploration sur différents champs. Pour cela, nous recherchons un magasin de recherche permettant de découper des données en tranches.

Il y aurait plusieurs sources de données et les stockeraient dans le magasin de recherche. Un pré-calcul peut éventuellement être nécessaire sur les données source, ce qui peut être effectué par un composant intermédiaire.

J'ai parcouru plusieurs blogs pour comprendre si ES peut aussi être utilisé de manière fiable comme magasin de données principal. Cela dépend principalement du cas d'utilisation que nous recherchons. Certaines des informations sur le cas d'utilisation que nous avons:

  • Environ 300 millions d’enregistrements chaque année avec 1 à 2 Ko.
  • Dans l’hypothèse où nous stockons des données sur un an, nous sommes aujourd’hui avec 300 Go, mais le scénario d’utilisation peut aller jusqu’à 400-500 Go en raison de la croissance des données.
  • Pour l’instant, nous ne savons pas exactement comment nous allons transmettre les données, mais en gros, cela peut aller jusqu’à environ 2 à 3 millions d’enregistrements toutes les 5 minutes.
  • Les requêtes de recherche sont faibles, mais nécessitent des requêtes complexes pouvant rechercher des données sur une période allant de 6 semaines à 6 mois.
  • document sera indexé sur presque tous les champs du document.

Certains blogs disent qu'il est suffisamment fiable pour être utilisé comme magasin de données primaire -

Et certains blogs disent que les ES ont peu de limitations -

Quelqu'un at-il utilisé Elastic Search comme la seule vérité des données sans disposer d'un stockage principal tel que PostgreSQL, DynamoDB ou RDS? J'ai constaté que ES rencontrait certains problèmes, tels que la division des cerveaux et la corruption d'index, qui pouvaient entraîner des problèmes de perte de données. Donc, je cherche à savoir si quelqu'un a utilisé ES et a eu des problèmes avec les données

Merci.

61
Harshit Agrawal

Réponse courte: cela dépend de votre cas d'utilisation, mais vous ne voulez probablement pas l'utiliser comme magasin principal.

Réponse plus longue: Vous devez vraiment comprendre tous les problèmes possibles liés à la résilience et à la perte de données. Elastic en possède excellente documentation de ces problèmes que vous devez vraiment comprendre avant de l'utiliser comme magasin de données primaire. De plus le post d'Aphyr sur le sujet est une bonne ressource.

Si vous comprenez les risques que vous prenez et si vous pensez que ces risques sont acceptables (par exemple, parce que de petites pertes de données ne posent pas de problème pour votre application), vous devriez alors vous sentir libre d'aller de l'avant et de l'essayer.

32
Cory

Il est généralement judicieux de concevoir des solutions de stockage de données redondantes. Par exemple, cela pourrait être une approche rapide et fiable: d'abord, il suffit de tout transférer sous forme de données à plat dans un stockage statique comme s3, puis d'extraire et d'indexer les données ES à partir de là. Si vous avez besoin de plus de flexibilité en exploitant certains ORM, vous pouvez avoir un calque RDS ou Redshift entre les deux. De cette façon, les données peuvent toujours être reconstruites dans ES.

Cela dépend de vos besoins et de la manière dont vous établissez l’équilibre entre redondance et flexibilité/performance. S'il y a beaucoup de données en jeu, vous pouvez stocker les données brutes de manière statique et en indexer certaines parties uniquement par ES.

Amazon Lambda offre d'excellentes fonctionnalités:

De nombreux développeurs stockent des objets dans Amazon S3 lorsqu'ils utilisent Amazon DynamoDB pour stocker et indexer les métadonnées de l'objet et permettre une recherche à haute vitesse. AWS Lambda facilite la synchronisation de tous les éléments en exécutant une fonction permettant de mettre à jour automatiquement l'index dans Amazon DynamoDB chaque fois que des objets sont ajoutés ou mis à jour à partir d'Amazon S3.

7
marekful