Base de données en mémoire pour la diffusion en continu des données du marché

sevzas

Base de données en mémoire pour la diffusion en continu des données du marché


Je recherche des recommandations pour une base de données en mémoire pour capturer l’état des données du marché en streaming. Bien que le taux de transaction puisse atteindre des millions / s, la plupart de ces transactions seront des mises à jour des enregistrements existants, de sorte que la base de données ne devrait pas grandir tout au long de la journée. La base de données sera réinitialisée chaque jour ouvrable.

Idéalement:

  • fonctionne sur l’environnement Windows, réside à l’intérieur de mon processus .NET, mais je suppose qu’un processus non géré n’est pas hors de question
  • offre la possibilité pour d’autres processus de se connecter et d’exécuter des requêtes, de préférence en utilisant SQL ou je suis ouvert à Linq
  • Me permet d’incorporer des déclencheurs dans la base de données afin qu’une mise à jour de ligne puisse déclencher une autre mise à jour de ligne
  • Permet d’envoyer des notifications aux clients connectés et abonnés pour recevoir des notifications lorsqu’une ligne particulière est modifiée.
  • gratuit ou très peu coûteux

Jusqu’à présent, je crois que MemSQL convient à tous les points sauf le dernier.

Réponses


 BenjaminBallard

Vous pourriez envisager VoltDB . Il répond à la plupart de vos critères.

Il ne fonctionne pas sur Windows, uniquement sur Linux 64 bits, mais cela pourrait être dans une machine virtuelle sur Windows ou dans le cloud.

Plutôt que des déclencheurs, il utilise des procédures stockées écrites en Java simple. Vous pouvez avoir une procédure qui effectue la première mise à jour et effectue conditionnellement la deuxième mise à jour. Il pourrait également vérifier une table d’abonnement et insérer conditionnellement des enregistrements de notification dans une table d’exportation, qui pourraient être diffusés automatiquement vers Kafka ou RabbitMQ à l’aide d’un connecteur d’exportation.

J’ai écrit un exemple d’application qui effectue un calcul des meilleures offres et offres nationales en temps réel sur des données de marché de streaming simulées. La majorité du code est en fait la génération de données simulées, le schéma de base de données est très simple et la procédure stockée qui effectue le calcul n’est pas beaucoup de code et peut vous donner une idée rapide de la simplicité d’une application comme celle-ci. construire dans VoltDB.

Nous avons de nombreux clients de Fortune 500 à de très petites startups et le coût n’a jamais été un obstacle.


 Basil Bourque

Moteur de base de données H2

Pas sûr de votre description si l’exécution de Java est une option. Si c’est le cas, le moteur de base de données H2 a une option pour les bases de données entièrement en mémoire. Et H2 prend en charge les déclencheurs. Gratuit et open-source. Prend en charge SQL via JDBC .

Un produit similaire est Apache Derby , bien que je trouve H2 plus facile à gérer.

Base de données avec mise en cache sophistiquée

Une autre option consiste à utiliser une base de données qui écrit dans le stockage mais maintient un cache sophistiqué en mémoire. Cela évite le problème de manquer de mémoire de manière inattendue car la base de données continuera à fonctionner correctement. Et lorsque vous disposez de suffisamment de mémoire pour toutes vos données, une bonne mise en cache vous donnera des performances similaires à celles en mémoire.

Postgres vient à l’esprit comme une base de données supérieure avec une bonne mise en cache qui offre également des déclencheurs puissants et flexibles. Consultez cette page sur dba.StackExchange.com sur le chargement des données Postgres dans la mémoire. Postgres dispose également d’une fonction NOTIFY pour pousser les modifications vers un client, comme mentionné dans la question. Postgres est open-source et gratuit.

sevzas

H2 semble être un choix convaincant pour les utilisateurs Java, mais pas si bon avec .Net. Nous utilisons largement Postgres pour nos cas d’utilisation de bases de données relationnelles typiques, mais il ne peut pas se rapprocher du niveau de performance requis pour l’usine de ticker de données de marché. Postgres est une fantastique base de données.


 sevzas

J’ai posté la question d’origine il y a 2 ans. En fin de compte, je n’ai pas choisi de base de données et j’ai fini par coder la fonctionnalité de traitement de ticker de données de marché à partir de zéro dans .Net. C’est parce que je n’ai pas pu trouver une base de données qui a fonctionné sur mon budget (près de 0 $) et sur le matériel dont je disposais (un serveur Intel multicœur). En plus des licences coûteuses, de nombreuses options hautes performances nécessitaient des clusters de serveurs ou d’autres configurations élaborées.

En faisant des recherches pour trouver une base de données qui répondait aux besoins de la question d’origine, j’ai trouvé plusieurs bases de données qui méritaient d’être mentionnées pour aider d’autres personnes confrontées au même problème. Gardez à l’esprit que mes recherches ont été effectuées il y a deux ans, ma liste doit donc être considérée comme un point de départ.

  • Kdb + (pas en cours mais a un client .net et des notifications)
  • ExtremeDb Financial Ed. (peut être en cours dans .Net et a des notifications)
  • RavenDb (peut être en cours dans .Net et a des notifications)

 

#de, #en, #la, #pour, basé, continu, des, Diffusion, données), du, marché, mémoire

 

wiki

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *