ScyllaDB est meilleur que Cassandra, et voici pourquoi.

ScyllaDB est l'une des bases de données NoSQL les plus récentes qui offre un débit très élevé avec des latences inférieures à la milliseconde. Le point important est qu'il accomplit cela à une fraction du coût d'une base de données NoSQL moderne.

ScyllaDB implémente presque toutes les fonctionnalités de Cassandra en C ++. Mais dire que c'est un simple port C ++ serait un euphémisme. Les développeurs de Scylla ont apporté de nombreux changements sous le capot qui ne sont pas visibles pour l'utilisateur mais qui conduisent à une énorme amélioration des performances.

Tu rigole c'est ça?

Non, je ne suis pas.

Comme vous pouvez le voir (si vous êtes allé sur ce lien), dans la plupart des cas, la latence de 99,9 centiles de Scylla est 5 à 10 fois meilleure que celle de Cassandra.

Toujours dans les benchmarks mentionnés ici, un cluster Scylla standard à 3 nœuds offre presque les mêmes performances qu'un cluster Cassandra à 30 nœuds (ce qui conduit à une réduction de coût de 10 fois).

Comment est-ce possible?

Le point le plus important est que Scylla est écrit en C ++ 14. On s'attend donc à ce qu'il soit plus rapide que Cassandra qui fonctionne uniquement sur JVM.

Cependant, il y a eu de nombreuses optimisations importantes de bas niveau dans Scylla, ce qui le rend meilleur que ses concurrents.

Approche sans partage

Cassandra s'appuie sur les threads pour le parallélisme. Le problème est que les threads nécessitent un changement de contexte, qui est lent.

En outre, pour la communication entre les threads, vous devez verrouiller la mémoire partagée, ce qui entraîne à nouveau une perte de temps de traitement.

ScyllaDB utilise le framework seastar pour partitionner les requêtes sur chaque cœur. L'application n'a qu'un seul thread par cœur. De cette façon, si une session est gérée par le core 1 et qu'une requête de requête pour cette session arrive au core 2, elle est dirigée vers le core 1 pour traitement. N'importe lequel des cœurs peut gérer la réponse après cela.

L'avantage de l'approche du rien partagé est que chaque thread possède ses propres files d'attente de mémoire tampon, CPU et NIC.

Dans les cas où la communication entre les cœurs ne peut être évitée, Seastar offre une communication inter-cœur asynchrone sans verrouillage qui est hautement évolutive. Ces primitives sans verrouillage incluent Futures et Promises, qui sont assez couramment utilisées dans la programmation et sont donc conviviales pour les développeurs.

Évitez le noyau

Lorsqu'une ligne est trouvée dans un SSTable, elle doit être envoyée sur le réseau au client. Cela implique la copie des données de l'espace utilisateur vers l'espace noyau.

Cependant, le noyau Linux effectue généralement des opérations de verrouillage multi-thread qui ne sont pas évolutives.

ScyllaDB s'occupe de cela en utilisant la pile réseau de Seastar.

La pile réseau de Seastar fonctionne dans l'espace utilisateur et utilise DPDK pour un traitement plus rapide des paquets. DPDK contourne le noyau pour copier les données directement dans le tampon NIC et traite un paquet dans un délai de 80 cycles CPU. (source: site Web DPDK)

Ne comptez pas sur le cache de page

Le cache de page est idéal lorsque vous disposez d'E / S séquentielles et que les données sont stockées sur le disque au format filaire.

Cependant, dans Scylla / Cassandra, nous avons des données sous forme de SSTables. Le cache de page stocke les données dans le même format, ce qui occupe une grande partie de la mémoire pour les petites données et nécessite une sérialisation / désérialisation lorsque vous souhaitez les transférer.

ScyllaDB, au lieu de s'appuyer sur le cache de page, alloue la majeure partie de sa mémoire au cache de lignes.

Row-Cache a les données dans un format de mémoire optimisé qui prend moins d'espace et n'a pas besoin de sérialisation / désérialisation

Un autre avantage de l'utilisation du cache de lignes est qu'il n'est pas supprimé lorsque le compactage se produit alors que le cache de page est détruit.

Ce sont les principales optimisations de ScyllaDB qui le rendent beaucoup plus rapide, plus fiable et moins cher que Cassandra. Scylla a de nombreuses autres optimisations sous le capot qui peuvent être trouvées ici.

Si vous êtes curieux de découvrir d'autres designs comme ceux ci-dessus ou si vous souhaitez nous contacter, connectez-vous avec moi sur LinkedIn ou Facebook ou envoyez un e-mail à [email protected]