Nous avons une application qui pourrait grandement bénéficier de l'utilisation d'un magasin de données basé sur des documents comme CouchDB. Mais nous avons un cas d'utilisation de requête que j'ai du mal à implémenter avec Map Reduce.Stratégie pour les requêtes de prédicat arbitraires dans Couchdb
Nos documents contiennent vraiment que deux types de données:
- attributs numériques
- attributs booléens
Le booléen attribue marque essentiellement un document comme appartenant à un ou plusieurs ensembles non exclusifs . Les attributs numériques auront toujours seulement besoin d'être additionnés. Une façon de structurer le document comme celui-ci:
{
"id": 3123123,
"attr": {"x": 2, "y": 4, "z": 6},
"sets": ["A", "B", "C"]
}
Avec cette structure, il est facile de travailler x total, y, les valeurs z pour les ensembles A, B et C, mais cela devient plus compliqué quand vous voulez Pour voir les agrégats pour les intersections comme A
Dans ce petit cas, je pourrais émettre des clés pour toutes les permutations de ABC ("A, B, C, AB, AC, BC, ABC"), mais je suis inquiet de la façon dont cela va évoluer. Nos documents pourraient appartenir à une combinaison de 80 ensembles et il est dirigé par une interface utilisateur qui peut construire n'importe quelle combinaison imaginable d'entre eux. Je suis enclin à penser que ce n'est pas un travail pour un CouchDB, et peut-être que MongoDB ou quelque chose d'autre serait mieux adapté à ce problème.
Est-ce que je manque quelque chose?
Merci Victor - à ce stade, je me penche vers MongoDB avec ses index multi-clés. Sinon, une approche que je pourrais essayer avec Couch serait de stocker des comptes de correspondance et d'utiliser le plus petit ensemble comme base pour une réduction côté client. Ou, comme vous le dites, peut-être prendre cela à deux sous-ensembles de combinaison. –