Dans le deuxième article, nous vous en dirons trois autres:
Et le troisième article sera consacré aux conclusions.
Remarque: Cela se concentrera uniquement sur la technologie sous-jacente et les fonctionnalités telles que les fonctionnalités d'entreprise seront généralement ignorées (le cas échéant).
TileD B
TileDB est une base de données construite autour de tableaux multidimensionnels . Il vous permet de simplifier le travail avec des types de données qui ne correspondent pas tout à fait aux systèmes de gestion de bases de données relationnelles (SGBDR) existants, par exemple, des tableaux denses et clairsemés , des trames de données . TileDB est spécialement conçu pour des cas d'utilisation tels que la génomique et les données géospatiales .
Caractéristiques notables
- Backends de données commutables avec prise en charge d' Amazon S3 , MinIO et plus encore.
- Intégrations de stockage pour HDFS , PrestoDB , Apache Spark , Dask, etc.
- Liaisons de langage pour C / C ++ , Python , R , Java et Go .
Ce que j'ai particulièrement aimé
Nous aimons ces bases de données «hautement spécialisées», affinées pour un ensemble spécifique de types de données et de tâches. Les SGBDR traditionnels sont, bien sûr, bons dans leur relative polyvalence pour couvrir un très large éventail de cas d'utilisation (sans blague). Mais il y a parfois des cas extrêmes où à la toute dernière étape (a) les capacités des systèmes «conventionnels» ne sont pas suffisantes, et (b) la tâche est très importante pour votre entreprise.
Nous nous attendons à ce que d'autres systèmes similaires émergent à mesure que la spécialisation des cas d'utilisation des bases de données et que de nouveaux domaines émergent. Le bon vieux SGBDR, bien sûr, n'ira nulle part, mais j'aimerais voir comment TileDB et d'autres systèmes similaires développent et élargissent les limites de ce qui est possible. Nous espérons qu'il y aura des bases de données non monolithiques très «piratables» qui auront une interface pour connecter des plugins afin que vous puissiez travailler avec des types de données très spécifiques pour des cas d'utilisation spécifiques. Mais plus là-dessus plus tard.
Questions au projet
- ? TileDB , , , ? .
- - ? , «TileDB -». ?
Materialize
Materialise est commercialisé comme "la première véritable base de données SQL en streaming" et ce n'est peut-être vraiment pas une exagération! Il s'agit essentiellement d'une base de données relationnelle "compatible filaire" avec PostgreSQL , mais avec une différence importante: elle offre des vues matérialisées actualisées en temps réel.
Il y a la définition de Materialise du " stockage en continu ", qui semble fonctionner pour cela .
Dans Postgres standard, par exemple, vous devez mettre à jour manuellement les vues matérialisées:
CREATE MATERIALIZED VIEW my_view (/* ... */);
REFRESH MATERIALIZED VIEW my_view;
/* The underlying tables change */
REFRESH MATERIALIZED VIEW my_view;
/* More stuff happens */
REFRESH MATERIALIZED VIEW my_view;
Cela peut être fait à n'importe quelle fréquence, par exemple à l'aide d'un script ou d'une tâche de planificateur. Ce que nous n'avons pas encore vu (même si nous avons toujours voulu voir), c'est une base de données qui prend en charge nativement les mises à jour incrémentielles des vues matérialisées. Oui, en effet: Materialise effectue le suivi des changements dans les sources de données spécifiées et met à jour les vues en fonction des changements dans ces sources.
Même si Materialise ne gagne pas ou ne reste pas suffisamment longtemps sur le marché, les capacités qu'il offre devraient continuer et seront presque certainement répliquées dans d'autres bases de données.
Caractéristiques notables
- , ( Postgres), JSON, CSV , Kafka Kinesis, .
- : «» (timely dataflow) «» (differential dataflow). , . Materialize, , , Materialize — « », , .
- Materialize «» Postgres, psql Postgres.
Materialise peut potentiellement en remplacer beaucoup. La chose la plus évidente est que le système vous permet d'utiliser tout l'arsenal de processus disponible pour mettre à jour progressivement vos vues matérialisées. Mais ce n'est pas une grande victoire.
Beaucoup plus important pour nous est que Materialise nous permet de rendre inactives les parties de la pile de données qui sont allouées pour suivre les modifications dans les sources de données. Cela peut être fait nativement :
CREATE SOURCE click_events
FROM KAFKA BROKER 'localhost:9092' TOPIC 'click_events'
FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY 'http://localhost:8081';
Votre base de données "connaît" désormais la source de données qu'elle peut utiliser pour créer des vues matérialisées mises à jour automatiquement. Ce "pipelining" natif me semble encore plus magique que la mise à jour automatique des vues. Si vous exécutez, par exemple, des fonctions sans serveur, ou des travaux Heron ou des pipelines de données Flink , qui ne font que suivre, et y ajoutez un opérateur
INSERT
, Materialise vous permettra de supprimer simplement cette partie de la pile.
Questions au projet
- Pourquoi une base de données distincte et non une extension Postgres ? Nous sommes sûrs qu'il y a de bonnes raisons architecturales pour lesquelles l'extension ne fonctionnera pas comme ça ici, mais j'aimerais savoir pourquoi.
- Est-il facile de créer des extensions pour d'autres sources de données? Comment écrire, par exemple, une extension pour Apache Pulsar ? Est-il prévu d'ouvrir les API aux développeurs à cette fin?
Prisma
Prisma est moins une base de données qu'un ensemble d'outils pour abstraire votre base de données autant que possible . Le système est actuellement compatible avec PostgreSQL , MySQL et SQLite côté base de données, et avec JavaScript et TypeScript en termes de langage (avec la perspective de prendre en charge d'autres bases de données et langages à l'avenir). Il est présenté comme la «couche de données pour les applications modernes», ce qui est généralement vrai.
La "manière dorée" d'utiliser Prisma est quelque chose comme ceci:
- Définissez vos types de données au niveau de l'application à l'aide du schéma SDL de Prisma.
- Basé sur le schéma créé, générez un code hautement idiomatique pour la langue de votre choix.
- Occupez-vous à créer des API REST, des API GraphQL et tout ce que vous voulez créer.
Nous comprenons les doutes de certaines personnes sur des outils comme Prisma. Il existe un grand groupe de développeurs qui s'opposent à l'abstraction des bases de données. Ils n'ont pas besoin de DSL et d'interfaces graphiques intelligents. Ils veulent écrire du SQL simple et créer manuellement tout le code d'interaction de la base de données. Nous comprenons le désir de maintenir ce degré de contrôle, mais nous vous recommandons tout de même de passer 20 à 30 minutes à essayer Prisma. Il nous semble qu'il fait un très bon travail pour trouver le «juste milieu» entre «force brute» et SQL brut.
Caractéristiques notables
- Prisma SDL , . .
- Prisma Migrate ( , SQL). , A , .
- Prisma Studio — , Prisma.
Le schéma DSL de Prisma vous permet non seulement de spécifier les types de données requis pour votre application, mais également de déterminer le générateur de code que vous souhaitez utiliser, ainsi que les informations de connexion pour la base de données à laquelle vous vous connectez.
De plus, des types énumérés (énumérations) sont fournis, des annotations pratiques telles que
@id
, @relation
et @default
. Réminiscence du DSL pour la migration de bases de données depuis ActiveRecord et Ecto , ainsi que des IDL similaires à ceux utilisés dans Protocol Buffers et Thrift .
J'aimerais voir une adaptation des schémas SDL de Prisma ou quelque chose de similaire en tant que standard indépendant du langage (adapté aux bibliothèques spécifiques à un langage). Le statu quo suppose que chaque langage de programmation réinvente la roue. Nous pensons qu'il serait utile d'avoir une manière indépendante du langage de définir les types qui définissent l'interaction entre l'application et la base de données.
Au fait, merci tout spécialement à Prisma pour l'excellente documentation. Nous considérons définitivement que c'est une différence importante, et si votre documentation ne rentre pas dans la section «Ce que j'ai le plus aimé» d'un article de blog, alors vous devriez investir plus de ressources dans la création de livres blancs.
Questions au projet
Prisma sera-t-il également utile dans les langages qui ont déjà largement utilisé les mappages relationnels objet (ORM)? Si vous utilisez ActiveRecord pour Ruby ou Ecto pour Elixir, quelle est l'incitation à changer?