9
votes

Encore plus léger que SQLite

Je cherche une implémentation de la bibliothèque C ++ SQL qui est simple à accrocher dans une sqlite, mais plus rapide et plus petite. Mes projets sont dans le développement des jeux et il y a certainement un point de coupure entre avoir besoin de passer le test d'acide et de vouloir une performance extrême. Je suis prêt à éloigner des requêtes de style SQL String, ce qui lui permet d'être dirigé par le code, mais je n'ai rien trouvé de côté qui fournit une flexibilité de type SQL tout en préférant les performances sur le test d'acide.

Je ne veux pas aller réinventer la roue et que l'idée de mettre en œuvre une bibliothèque SQL seul est assez décourageante, même si cela ne sera qu'un simple sous-ensemble de tous les appels que vous pourriez faire. < / p>

J'ai besoin des commandes de base (sélectionnez, modifier, supprimer, insérer, avec une jointure, et où), pas les opérations de données (triage, min, max, décompte) et n'ont pas besoin de la base de données pour être atomique, ni même appliquer la cohérence (je peux utiliser un vrai service SQL pendant que je teste et débogage).


0 commentaires

6 Réponses :


0
votes

Si vous avez juste besoin de ces opérations de base, vous n'avez pas vraiment besoin de SQL. Jetez un coup d'œil au stockage de données NOSQL, par exemple Cabinet Tokyo .


0 commentaires

1
votes

Jetez un coup d'œil à Gigabase et sa Twin FASTDB.


0 commentaires

10
votes

Je ne suis pas sûr que vous parvenez à trouver quoi que ce soit avec de meilleures performances que SQL. Surtout si vous voulez des opérations comme des jointures ... est une vitesse SQLite vraiment un problème? Pour les demandes simples, il est généralement plus rapide que tout SGDB complet. Vous n'avez pas un problème d'index?

À propos de la taille, ce n'est pas un événement supplémentaire 1Me dans le fichier binaire, donc je suis un peu surpris. C'est un problème.

Vous pouvez regarder Berkeley DB, qui doit être probablement la DB la plus rapide disponible, mais c'est surtout seulement la clé de la clé de la valeur.

Si vous avez vraiment besoin d'une vitesse plus élevée, envisagez de charger toute la base de données en mémoire (en utilisant à nouveau SQLite).


3 commentaires

+1; Berkeley DB serait mon premier choix lorsqu'il s'agit de telles exigences, mais ce n'est pas basé sur SQL.


+1. Je dirais que Berkeley DB offre "SQL comme une flexibilité tout en préférant des performances". Je ne vois pas une exigence "SQL basée".


1 Mo est un problème dans les jeux. Même aujourd'hui, il s'agit d'environ cinq pour cent du budget de code (sur le codage PS3 / 360). Sur ce que les autres codeurs considéreraient comme un code de tiers facultatif.



14
votes

Êtes-vous sûr que vous avez obtenu la vitesse maximale disponible de SQLite? Sorti de la boîte, SQLite est extrêmement sûr, mais assez lent. Si vous savez ce que vous faites et que vous êtes disposé à risquer la corruption DB sur un crash de disque, il existe plusieurs optimisations que vous pouvez faire cela offrant des améliorations de vitesse spectaculaires.

en particulier:

  • Éteignez la synchronisation
  • groupe écrit dans les transactions
  • TABLES D'INDEX
  • Utilisez la base de données dans la mémoire

    Si vous n'avez pas encore exploré tous ces éléments, alors vous courez probablement plusieurs fois plus lentement que vous leuriez.


4 commentaires

+1. J'irais avec ça; Personnellement, je ne trouve rien (SQL basé) mieux que SQLite.


Je ne peux pas dire assez à quel point les transactions ont un impact sur les performances avec des inserts et des sqlites. ÉNORME.


Après avoir expérimenté, oui, je manquais une astuce avec ce que vous pouvez faire avec SQLite. J'avais négligé toutes les options pour la rendre plus rapide en soi. Merci beaucoup.


C'est une source open source, vous pouvez personnaliser vos besoins en utilisant des définitions pour éliminer ce que vous ne voulez pas et même commentez la liste SQL ou même Richard Hipp cette exigence particulière que vous avez. Il pourrait être considéré comme une version future.



1
votes

Vous voudrez peut-être envisager InnoDB intégré . Il offre la fonctionnalité SQL de base (évidemment, voir MySQL) mais n'offre pas la syntaxe SQL réelle (comme cela fait partie de MySQL, pas d'InnoDB). À 838kb, ce n'est pas trop lourd.


0 commentaires

0
votes

Vous pouvez essayer Leveldb, c'est la clé / valeur de valeur

http://code.google.com/p/leveldb


0 commentaires