obtenir des recommandations pour de simples en mémoire DB * serveur * (pas la persistance nécessaire) [fermé]

StackOverflow https://stackoverflow.com/questions/4246675

Question

doit supporter plusieurs connexions, de préférence par l'intermédiaire d'ODBC. Les clients seront en cours d'exécution en tant que processus distincts sur la même machine. Pas besoin de persévérance, car les clients vont gérer la persistance ailleurs. Les clients sont écrits en C ++ si elle compte.

Les données est assez simple, il est un ensemble de cartes bi-directionnels indépendants. L'accès est soit directement par une valeur ou une plage (between X and Y), aucune mise à jour. Nous avons besoin de SQL ici ne fait, donc les solutions non-SQL peuvent également être pris en considération.

L'application cliente est multi-processus et peut fonctionner sur plusieurs machines. Chaque machine doit avoir une copie locale de ce DB, qui est mis à jour sur la banque centrale par ses clients locaux.

Edits multiples :

  1. la plate-forme est Linux
  2. disque RAM est pas une option pour des raisons de sécurité - nous ne voulons pas que toute personne ayant accès à la machine serait en mesure de visualiser les données
  3. les données doit être persistante peut uniquement sous forme cryptée, de sorte que la solution ne doit pas non plus persister les données du tout ou permettre à un filtre défini par l'utilisateur / greffon pour la persistance.
Était-ce utile?

La solution

Juste à cause de ma familiarité avec elle, j'irais avec MySQL. Pour l'utiliser comme une base de données en mémoire utilisent la mémoire comme type de table. Redis est une mémoire NoSQL base de données qui serait probablement un ajustement parfait pour cela (Il fonctionne en mémoire, avec l'écriture du disque pour la persistance seule qui peut être désactivé).

Autres conseils

Une raison particulière pour ne pas utiliser SQLite avec une RAM db ouvert?

disque RAM est pas une option pour des raisons de sécurité - nous ne voulons pas que toute personne ayant accès à la machine serait en mesure de visualiser les données

Vous êtes hors de la chance. Toute personne ayant accès à la machine peut afficher les données de / proc / $ PID / mem de toute façon.

Si vous parlez accès nonroot que d'utiliser le / tmp / répertoire $ / méthode avec chmod 700.

Voici une astuce que vous pouvez utiliser sous Linux, il est appelé « Lazy Démontez ».

  1. Monter un endroit tmpfs
  2. Mise en service un processus (es) à l'utiliser, ce qui chdir () dans ce répertoire. Vous pouvez utiliser une instance de MySQL; mysql fait toujours un chdir dans son répertoire de données.
  3. Une fois le processus a démarré, avec succès tmpfs umount avec l'option -l (paresseux).

tmpfs existe toujours et continuera d'exister tant que processus (es) sont l'accès, mais il ne peut pas être consulté par des processus non liés plus qu'il ne soit plus présent dans son point de montage.

Notez que cela n'a aucune racine cesse d'obtenir les données dans les tmpfs, juste en fait un peu plus difficile.

note également qu'il peut être échangé, vous devriez donc désactiver échange (ou utilisez échange crypté) si vous avez absolument besoin d'être persistant.

Boost.MultiIndex . Pas un choix évident, mais il est basé sur des concepts de DB relationnelles.

  

Le concept de multi-indexation sur la   même collection d'éléments est   emprunté à base de données relationnelle   terminologie et permet de   spécification des données complexes   structures dans l'esprit de multiplication   tables relationnelles indexées lorsque simples   ensembles et les cartes ne suffisent pas. Une large   sélection d'indices est fourni,   modelé des récipients analogues STL   comme std :: set, std :: liste et hachée   ensembles.

Majeures avec datadir = tmpfs vous avez monté à cet effet. Vous aurez besoin de concocter un script de démarrage qui installe la base de données (en utilisant mysql_install_db ou quelque chose) au démarrage, bien sûr, comme vous perdrez toutes les données.

memcached peut être une solution viable. Il est un magasin de valeur clé qui peut être réglé pour maintenir des valeurs pour un certain laps de temps, est évolutive et est simple à configurer et commencer à utiliser. Il est également exécuté dans toutes sortes d'environnements. Voici le site wiki pour plus d'informations , en particulier depuis la page principale n'est pas utile a presque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top