CouchDB est pratique pour développer (CouchApps) localement et ensuite pousser dans la production à distance. Malheureusement, avec des ensembles de données de la taille d'une production, travailler sur des vues peut être fastidieux. Quels sont les bons moyens de prélever des échantillons d'une base de données CouchDB pour une utilisation dans le développement local?Échantillonnage d'une grande base de données CouchDB pour le développement local, évitant les longues vues
2
A
Répondre
2
La réponse est la réplication filtrée. J'aime le faire en deux parties:
- Répliquer la base de données de production,
example_db
à mon serveur local commeexample_db_full
- Effectuer la réplication filtrée
example_db_full
-example_db
, où le filtre découpe suffisamment de données Builds sont donc rapides, mais garde assez de données pour que je puisse confirmer que mon code fonctionne.
Les documents à sélectionner peuvent être spécifiques à l'application. À ce moment, je suis satisfait d'un simple passage/échec aléatoire avec un pourcentage que je peux spécifier. Le caractère aléatoire est cohérent (c.-à-d. Le même document réussit ou échoue toujours.)
Ma technique consiste à normaliser la somme de contrôle du contenu dans le champ _rev
du document sur une plage de [0.0, 1.0). Ensuite, je spécifie simplement une fraction (par exemple 0.01
), et si la valeur de somme de contrôle normalisée est < = ma fraction, le document passe.
function(doc, req) {
if(/^_design\//.test(doc._id))
return true;
if(!req.query.p)
throw {error: "Must supply a 'p' parameter with the fraction"
+ " of documents to pass [0.0-1.0]"};
var p = parseFloat(req.query.p);
if(!(p >= 0.0 && p <= 1.0)) // Also catches NaN
throw {error: "Must supply a 'p' parameter with the fraction of documents"
+ " to pass [0.0-1.0]"};
// Consider the first 8 characters of the doc checksum (for now, taken
// from _rev) as a real number on the range [0.0, 1.0), i.e.
// ["00000000", "ffffffff").
var ONE = 4294967295; // parseInt("ffffffff", 16);
var doc_val = parseInt(doc._rev.match(/^\d+-([0-9a-f]{8})/)[1], 16);
return doc_val <= (ONE * p);
}
Questions connexes
- 1. Problème avec les vues dans CouchDB
- 2. Vues CouchDB en erreur
- 3. Caractères génériques dans les vues avec CouchDB?
- 4. Exporter de la base de données AppEngine vers la base de données de développement local?
- 5. couchdb - nouvelles vues checkpointing contre énorme update_seq
- 6. Comment accélérer les vues python dans CouchDB?
- 7. Base de données CouchDB par entité principale
- 8. Alternative à une grande base de données
- 9. Les meilleures pratiques pour le développement itératif de vues
- 10. Rails rake tâche pour le chargement en direct (MySQL) base de données à base de développement local
- 11. Clés de plage dans CouchDB Vues
- 12. Vues base de données SQL
- 13. Autorisation CouchDB sur une base par base de données
- 14. Grande base de données d'analyse réactif (MYSQL)
- 15. MySQL supprimer les doublons de grande base de données rapide
- 16. Évitant Héritant Toutes les choses de la classe de base
- 17. créer grande base de données de 10 Go pour Informix
- 18. HTML5 applicationCache dans le développement local
- 19. Comment stocker des données longues comme les données d'étiquette RFID dans une base de données postgres?
- 20. Base de données Stockage des chaînes de texte longues
- 21. Script de reconstruction de base de données Ant, évitant les invites interactives
- 22. Gestion de base de données distante à partir du serveur de développement local
- 23. Rspec> tester les vues de base de données
- 24. Vues CouchDB: supprimer les doublons * et * commander par temps
- 25. Google OAuth et le développement local
- 26. Développement d'un framework de base de données
- 27. Quelle base de données pour local et client/serveur?
- 28. MongoDB ou CouchDB comme base de données pour les appareils mobiles?
- 29. SQL Express local pour le développement ASP.NET/Sharepoint?
- 30. La normalisation de base de données et le développement paresseux
Il me vient à l'esprit que mon implémentation finale n'a pas la propriété 0.0, 1.0 de mon idée initiale. Vraiment, c'est 00 ... - ff ... entiers hexadécimaux. Mais le principe est le même. – JasonSmith