Question

Je dois développer un système permettant de stocker un grand nombre d'objets (10 à 100 sur des milliers). Chaque objet est semblable à un email - il y a un corps de texte principal et plusieurs champs de texte auxiliaires de taille limitée. Un corps sera composé de quelques octets à plusieurs Ko.

Chaque élément aura un identifiant unique unique (probablement un GUID) qui l'identifie.

Le magasin ne sera écrit que lorsqu'un objet lui est ajouté. Il sera lu souvent. Les suppressions seront rares. Les données sont presque toutes du texte lisible par l’homme, il sera donc facilement compressible.

Un système qui me permet d’émettre les E / S et de gérer la mémoire et la mise en cache serait idéal.

Je vais garder les index en mémoire et les utiliser pour mapper les index sur la clé unique (et principale) des objets. Une fois que j'ai la clé, je la chargerai à partir du disque ou du cache.

Le système de gestion de données doit faire partie de mon application. Je ne veux pas dépendre des services du système d'exploitation. Ou des paquets installés séparément. Natif (C ++) serait mieux, mais une chose gâchée (C #) serait acceptable.

Je pense qu'une base de données est un choix évident, mais elle doit être très rapide pour rechercher et charger dans la mémoire d'un objet. Je ne connais pas les technologies de base de données et je crains que les systèmes relationnels généraux ne gèrent pas efficacement toutes ces données de taille variable.

(Remarque, cela n'a rien à voir avec mon travail - c'est un projet personnel.)

Selon votre expérience, quelles sont les alternatives viables à une base de données relationnelle traditionnelle? Ou un DB fonctionnerait-il bien pour cela?

Était-ce utile?

La solution

Regardez SQLite , il comporte des liaisons pour de nombreux langages de programmation et environnements, et est, comme le Berkeley DB , une base de données sur disque ne nécessitant pas l'installation d'un moteur de base de données.

Si vous ajoutez simplement les bons index, les recherches seront très rapides et, comme il s'agit d'une base de données basée sur un ensemble, vous pouvez toujours effectuer des requêtes en bloc et similaires.

Autres conseils

Je voudrais essayer PFS: http://blog.sensenet.hu/post/2008/05/Portal-File-System- (PFS) -an-open-content-content-repository- for-Net.aspx

Dommage que vous soyez sur c / .Net, car Jackrabbit aurait été un choix parfait.

Vous n'indiquez pas vraiment comment vous allez rechercher ces données. J'ai effectué un travail similaire avec des applications d'extraction de texte dans lesquelles les données principales sont stockées dans MySQL, mais je conserve un index de recherche textuelle dans Ferret (le projet est en Ruby) pour trouver la ligne appropriée dans la table des messages en fonction de la recherche par mot-clé. Je pense que cette approche hybride pourrait également fonctionner pour vous. SQLServer et Lucene.Net peuvent bien fonctionner pour vous dans l'environnement C #. Je suis certain que si vous regardez autour de vous, vous pourrez trouver des solutions similaires dans l'espace C ++.

Je ne recommande pas d'utiliser la recherche en texte intégral SQLServer - Lucene et ses dérivés semblent être un bien meilleur choix.

Je pense que vous auriez beaucoup plus de chance avec n'importe quelle solution de base de données par rapport à une solution basée sur des fichiers. À peu près toutes les bases de données modernes devraient être capables de gérer vos besoins en données, du moins en termes d'espace. Construire les index sur votre grand champ est une autre affaire et c’est la raison pour laquelle je recommanderais une approche de fouille de texte si vous devez effectuer une recherche par dessus.

Cela ressemble à ce pour quoi Berkeley DB a été conçu. Cependant, je ne l'ai pas utilisé.

Peut-être devriez-vous penser à un serveur WebDav comme Apache + mod-dav. Ceci stockera le contenu et les métadonnées sur le disque. Pour effectuer une recherche, vous pouvez placer un moteur de recherche existant sur ce serveur WebDav, par exemple. Lucene.

De cette façon, vous maintenez votre propre développement au minimum et commencez avec un ensemble puissant de fonctionnalités.

Avez-vous consulté db4o ou Karvonite ?

Consultez Glimpse .

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