Est-il fiable (un seul serveur) MongoDB alternative?
J'aime l'idée de document de bases de données, en particulier MongoDB. Il permet un développement plus rapide que nous n'avons pas à ajuster le schéma de base de données. Cependant MongoDB ne prend pas en charge le multi-document de transactions et ne garantit pas que les modifications sont écrites sur le disque immédiatement comme normal de bases de données (je sais que vous pouvez faire le temps entre les bouffées de chaleur assez petite, mais c'est toujours pas garantie).
La plupart de nos projets ne sont pas si grands qu'ils ont besoin de choses comme des environnements multi-serveur. Donc, en gardant cela à l'esprit. Existe-il un seul serveur MongoDB-comme document de bases de données qui prennent en charge multi-document de transactions et fiable de rinçage sur le disque?
C'est exactement ce que je veux dire. Avec les bases de données comme PostgreSQL si j'écris quelque chose à la base de données et l'opération a réussi, je suis sûr que les données seront là, si la machine tombe en panne. MongoDB est proche de ce avec la journalisation. Mais comme vous le remarquez, il se complique pas la garantir.
Oui, c'est le " D " dans l'ACIDE.
Hmm, ce que peu de gens savent réellement, c'est que même directement sur le disque a un retard sur elle en raison de la façon dont les données est en fait écrit par le système d'exploitation pour les secteurs de disque, en fait, si le serveur tombe en panne tout à coup, vous n'aurez probablement à perdre peut-être un couple de la Fpo à partir de SQL
Il y a une option dans Postresql et pas une exigence que le WAL être configuré pour l'immédiat, plutôt que de retard écrit.
OriginalL'auteur Tim | 2013-02-19
Vous devez vous connecter pour publier un commentaire.
Une réponse courte à votre spécifique (mais brève) exigences:
RavenDB [Un] fournit un support pour le multi-doc transactions [Deux]. Malheureusement, je ne sais pas, il gère la durabilité.
CouchDB [Trois] fournit durable écrit, mais pas de multi-doc transactions
RethinkDB [Quatre] fournit durable écrit, mais pas de multi-doc transactions.
Donc, vous pourriez vous demander ce qui est différent au sujet de ces 3 solutions? La plupart du temps, c'est leur interrogation (je dirais RethinkDB a la plus avancée de l'un couvrant à peu près tous les types de requêtes: les sous-requêtes, Jointures, des agrégations, etc.), leur histoire (lire: la production de l'état de préparation -- ici, je dirais probablement CouchDB est dans la tête), leur modèle de distribution (vous l'avez mentionné, ce n'est pas intéressant pour vous), de leur licence (RavenDB: commercial, CouchDB: Licence Apache, Rethinkdb: AGPL).
La prochaine étape serait pour vous d'examiner brièvement sur leurs fonctionnalités et de comprendre que l'on est proche de vos besoins et de lui donner un essai.
CouchDB est un seul serveur de base de données. Il vous permet de définir le maître de réplication du maître, mais c'est une autre histoire. CouchDB écrit sur le disque avant de reconnaître une opération. Finalement, la cohérence a très peu à voir avec la durabilité en soi: au fond, une manière synchrone base de données répliquée peut être non-durable.
Étrange, j'ai lu cette page: guide.couchdb.org/draft/performance.html en vertu de laquelle il est dit: ..."tampons de stocker les données en mémoire avant de s'engager sur le disque afin d'assurer un débit de données plus élevé. Dans le cas d'une perte de puissance ou de crash (hardware ou software), les données ont disparu."... et la dernière fois que j'ai vérifié réplication immédiate est une exigence pour de vrai la durabilité à l'extérieur de simples paramétrages de serveur, je suis aussi sûr que vous, les hommes, en étant un seul sever de base de données, je suis assez certain que couchdb peut être installé dans un cluster: guide.couchdb.org/draft/clustering.html
Ignorer les édité partie de mon dernier commentaire, j'ai lu de mal, mais la référence à la couchdb site est toujours debout
Je ne connaissais pas la valeur par défaut a été modifié. Mais vous pouvez toujours activer. Pour référence @Sammaye fait référence à ce paragraphe: "le Retard s'engager (avec séquentielle Uuid) est probablement le plus important CouchDB paramètre de configuration de la performance. Lorsqu'il est défini sur true (valeur par défaut), Documents permet d'opérations à exécuter sur le disque sans explicite fsync après chaque opération de"
OriginalL'auteur Alex Popescu
Il pourrait être intéressant de regarder ArangoDB. C'est un modèle multi base de données avec un modèle de données flexible pour des documents, des graphiques et des valeurs-clés. Avec le respect de vos exigences spécifiques, ArangoDB de la base de données a plein d'ACIDE opérations qui peuvent s'étendre sur plusieurs documents dans la même collection ainsi que sur plusieurs collections (voir Les Transactions en ArangoDB). Qui est, vous pouvez exécuter un groupe de manipulations pour vos documents dans une transaction et avoir la garantie d'atomicité et de l'isolement. Si vous avez également définir
waitForSync: true
(comme il est décrit plus bas sur cette page), vous bénéficiez d'une garantie de synchronisation sur le disque avant de votre transaction rapports d'achèvement. Notez que cela se fait automatiquement si votre transaction s'étend sur plusieurs collections.
OriginalL'auteur Max Neunhöffer
J'ai une certaine expérience avec CouchDB et ArangoDB qui je peux partager:
Vous pouvez exécuter CouchDB avec la durabilité activée (delayed_commits = false) donc il va également de synchroniser vos données sur le disque.
Cependant, c'est un paramètre global de sorte qu'il affecte toutes les écritures. Autant que je sache, vous ne pouvez pas le mettre sur un par-au niveau de la collection (le CouchDB terme de "collection" serait "base de données").
Concernant les multi-opérations de document: CouchDB a MVCC, donc, la lecture de plusieurs documents à partir de la même base de données fournit un résultat uniforme, même dans le visage de parallèle écrivains.
L'écriture de plusieurs documents à la même base de données peut également être faite transactionnelle pour les cas spéciaux, par exemple lors de l'utilisation de la majeure partie des documents de l'API.
Mais il est impossible d'exécuter une base de données des opérations de CouchDB. Ce n'est tout simplement pas prévu.
Sur ArangoDB: dans ArangoDB vous pouvez activer la synchronisation immédiate sur le disque par-au niveau de la collection: vous pouvez l'activer pour les collections, que vous ne tolérera aucune perte de données. Vous pouvez activer la synchronisation immédiate off pour les collections importantes pour des raisons de performances. Il sera alors toujours synchroniser les modifications sur le disque fréquemment, mais pas immédiatement. Il offre multi-document et multi-collection transactions.
OriginalL'auteur stj
La caisse de l'suivantes:
arangodb
rethinkdb
OriginalL'auteur joshua
Je vous suggère de regarder Couchbase.
Couchbase peut être exécuté seul serveur & vous pouvez ajouter des nœuds plus tard si vous le souhaitez.
Couchbase a memcached intégré, de sorte que vous avez rapide la mise en cache de données commune, avec une méthode fiable de mises à jour écriture sur le disque.
Ils ont aussi un nouveau langage de requête (en cours d'élaboration, mais vous pouvez l'utiliser maintenant) appelé NQL ("Nickel") qui vous donne SQL comme l'accès, si c'est important pour vous.
Avec la croix-centre de données de réplication, vous pouvez garder les deux DBs sur des machines différentes ou des centres de données de synchronisation, ce qui est bon pour avoir une sauvegarde hors-site. Cela vous permet également d'ajouter des élastiques de recherche si vous souhaitez avoir un moteur de recherche plein texte pour ces types de requêtes.
En bref, Couchbase est une jolie solution complète, tous open source et intelligent (à mon avis) de l'architecture pour résoudre les problèmes typiques avec des bases de données distribuées (par exemple: chaque document est "possédé" par un nœud donné, de sorte que tous les changements aller à ce nœud, puis les mises à jour sont répliquées, c'est mieux, je pense, que de dire Riak où vous pouvez avoir des mises à jour vont à deux nœuds, puis se réconcilier.)
Vous pouvez utiliser Couchbase sur un nœud pour exécuter la base de données pour de nombreux projets en séparant les projets dans des compartiments différents.
OriginalL'auteur nirvana
il existe de nombreuses bases de données nosql et certainement son difficile de choisir un seul. Vous aurez à venir avec des exigences appropriées et de savoir exactement ce que vous voulez.
Lien suivant par rapport à presque tous les populaires les bases de données nosql
http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
J'espère que cette aide.
OriginalL'auteur Abhijit Gaikwad
Berkeley DB est celui que nous avons utilisé. Il prend en charge ACIDE. Il possède des transactions, mais aussi à votre terme "multidocument" s'applique, je ne suis pas entièrement sûr. J'imagine que tant que chaque base de données (c'est à dire les documents individuels) partage le même BDB environnement (c'est à dire où les transactions sont stockées), alors peut-être que c'est ce que vous voulez. BDB n'ont d'autres différences. Avec la durabilité et la haute simultanéité, les commits sont assez lent.
OriginalL'auteur Adam Marcionek
Essayer: http://www.orientdb.org/
"OrientDB a la souplesse du Document de bases de données et la puissance de la Graphique de bases de données pour gérer les relations. Il peut travailler dans le schéma de mode, de schéma-plein ou un mélange des deux. Prend en charge des fonctionnalités avancées telles que l'ACIDE Transactions, Rapide des Index, des Indigènes et des requêtes SQL. Il les importations et les exportations des documents JSON. OrientDB utilise un nouvel algorithme d'indexation appelé MVRB-Arbre, dérivé de la Rouge-Noir de l'Arbre et de l'Arborescence B+avec les avantages des deux: insertion rapide et ultra-rapide de recherche".
OriginalL'auteur macerie
Vous n'avez pas à ajuster des schémas dans le document de magasins de données, mais cela ne signifie pas que vous n'avez pas besoin d'une sorte de schéma que vous voulez probablement faire quelque chose de significatif avec vos données. Il apparaît à vous comme un ACIDE de base de données. Si vous avez des données relationnelles et vous avez besoin des transactions avec ces données, bien qu'il semble très bien comme vous avez besoin d'une base de données relationnelle.
Avec "NoSQL" bases de données comme Mongo, vous donnant de l'ACIDE pour des fonctionnalités comme beaucoup d'écriture des répliques, la fragmentation et la rapidité d'accès aux données du document. On dirait que vous n'en bénéficient pas alors pourquoi prendre le compromis? Beaucoup de gens l'ont fait les approches hybrides dernièrement avec PostgreSQL par le stockage de documents dans une table relationnelle comme des gouttes de JSON. Avec cela, vous pouvez avoir l'avantage de stocker vos données ne sont pas strictement structuré colonnes où il n'est pas nécessaire.
Donc, si vous avez plusieurs documents dont vous avez besoin pour être transactionnel sur la mise à jour, vous pouvez la colonne des clés, et avoir une colonne "document" ou quelque chose où il est tout simplement une goutte de JSON où vous sérialiser et désérialiser. Ce n'est pas de critiquer Mongo ou d'un autre document magasins comme une base de données, mais il est tout simplement pas vraiment un bon choix pour les multidocument de données. MarkLogic, je crois, ne l'ACIDE au cours de plusieurs documents.
Je pense que beaucoup de gens trouvent appel avec mongodb en raison du schéma-ness, mais je pense qu'au final ils obtiennent peu en essayant d'incorporer un modèle relationnel. Donc, comme toujours, la DB choix dépend de l'utilisation de vos données.
Pas tout à fait. Vous avez seulement besoin d'ajuster le schéma si vous avez besoin d'une autre colonne. Les index peuvent être ajoutés et supprimés, comme requis pour que le coût de la reconstruction. N'ayez pas peur de diviser votre indice de définitions dans la logique des fichiers de révision-contrôle, et s'appliquent en tant que de besoin (sans doute avec la commodité des scripts pour nettoyer reconstruit et IC test)
OriginalL'auteur Michael Papile
Si j'étais vous, je voudrais jeter un oeil de près Solr. Les données sous-jacentes de la couche (Lucene) est de loin le plus abouti des bases de données NoSQL, et Solr permet l'installation, la configuration et l'intégration d'un hôte unique lucene magasin trivial.
En réponse à votre question, il prend en charge l'utilisateur délimité transactions. La lecture optimisée de la nature de Lucene peut ne pas convenir pour de nombreuses applications, mais la plupart de ceux qui sont bien adaptés à Solr/Lucene+[SQL,Cassandra,CouchDB,RDF] selon les besoins.
Personnellement, j'ai tendance à commencer avec Solr+SQL ou Solr+RDF, mais je sais que certaines personnes qui aiment l'ensemble de NodeJS+CouchDB style, et je suis convaincu de la valeur de la flexibilité qu'il offre.
La ligne de fond est qu'il y a assez de NoSQL et SQL-extensions qui se soucient de l'intégrité des données afin de satisfaire à toute exigence, vous avez sans que vous ayez à vous compromettre ou de données de vos utilisateurs.
malheureusement, l'interlocuteur n'a pas de fournir des détails de la "type d'utilisation" ils ont été mettre le système. Je ne peux que supposer que votre cas était à haut volume, petites écrire. J'ai couru sur Lucene faible volume grand-écriture/haute-volume grand-lire des projets sans les problèmes d'instabilité à tous, et n'ai rien trouvé de mieux que de Lucene. La classe d'applications avec un petit ensemble de hv-sw de données et un ensemble de lv-lw données est importante, et Solr+? est un bon candidat pour cela.
OriginalL'auteur Recurse
Personnellement, je crois que vous avez vraiment besoin de vérifier ce que vos exigences.
En raison de la dynamique de la façon dont le système d'exploitation de votre serveur fonctionne, il est compliqué de dire que tout est "immédiatement" va sur le disque, même lorsque vous dites qu'il. certes, je sais que l'ACIDE techs comme SQL sont vulnérables à l'partielle de la corruption par le biais de l'inachevé et de perdre opérations spécifiques au sein d'une fenêtre lorsqu'un seul serveur tombe en panne, malheureusement c'est un des problèmes de l'aide d'un seul serveur, vous avez pas d'autre choix que de l'accepter.
Je devrais noter qu'une transaction n'a pas de s'assurer que votre serveur va recevoir l'ensemble des données avant la panne ( http://en.wikipedia.org/wiki/Database_transaction ), je veux dire que si le serveur meurt au cours d'une transaction?
Vous pouvez effectuer un coffre-fort de restauration basée sur les contraintes en termes de transactions, mais quelques bases de données offrent la possibilité de continuer à jouer à la transaction, sauf s'ils ont déjà reçu toutes les données nécessaires pour cela (ce qui n'est pas normalement le cas), par laquelle les données peuvent même être obsolète de toute façon.
En fait, en raison du poids de certaines transactions et le nombre de requêtes effectuées au sein d'eux, je pense que vous pourriez obtenir une plus grande fenêtre de la perte d'exploitation à l'aide de transactions que vous pouvez à partir de la 60ms écrire sur le disque fenêtre sur MongoDB à la fois. Mais bien sûr cela dépend de l'abus, cependant, tout comme les procédures stockées, cet abus est un lieu commun.
Opérations de briller sur les suppressions en cascade et des scénarios typiques comme le transfert d'argent vers un compte en banque, cependant, la possibilité de mise en cascade supprime normalement fait mieux (comme la plupart des sites n') par une tâche cron avec l'application de marquage de la ligne comme supprimé (pour éviter l'annulation d'une transaction montrant les données supprimées par l'utilisateur); de cette façon, vous pouvez faire beaucoup de choses pour assurer la cohérence que vous ne pouvez pas en temps réel le faire pendant que l'utilisateur est à l'aide de votre application.
De sorte que vous devriez vraiment demander pourquoi vous avez besoin de la technologie et ce qu'elle va réussir à le faire, un guichet automatique de la brièveté de votre question me dit vous n'êtes pas sûr au sujet de vos exigences complètement.
Vrai, il n'est pas possible si vous souhaitez que votre vitesse de ramper jusqu'à un point où pour ne pas dépasser les petits sites, les transactions ont été vraiment conçu pour être utilisé pour mission essentielle des procédures critiques vraiment.
Fondamentalement, si vous utiliser quoi que ce soit, mais les transactions et quelqu'un vous dit que vous ne pouvez pas obtenir la corruption cos cette base de données peut défier les lois de l'informatique est mensonges. Même avec l'aide de transactions il ya une petite chance que la transaction peut être corrompu
Votre suggestion que les bases de données d'éviter la corruption est en quelque sorte "en défiant les lois de l'informatique" est disingenious. Bien qu'il existe certains problèmes difficiles impliquant des interactions entre multi-couche de mise en cache lors de l'utilisation des consommateurs matériel de qualité, des milliers de personnes ont mis en œuvre la corruption libre de transaction protocoles. Que MongoDB n'est pas un problème, et de la culture vous présentent ici -- un mépris pour 4 décennies de la théorie de base de données MongoDB a cultivé -- est autant un problème que son manque d'ACIDE.
Oui, je le fais. Pour commencer, jetez un oeil à research.microsoft.com/en-us/people/philbe/ccontrol.aspx et à lca2007.linux.org.au/talk/278.html. Le point de l'ACIDE n'est pas que vous ne perdrez pas les données que vous écrivez, c'est que vous n'avez jamais écrire des données qui sont essentielles à la cohérence de la base de données. C'EST DUR, c'est pourquoi des milliers de programmeurs l'ont fait, plutôt que des millions de personnes. Postgres est assez mature l'argent intelligent est sur votre ami misconfiguring ou l'utilisation abusive de celui-ci; toutefois, il est possible qu'ils ont trouvé un bug. Mais la conception de Postgres est Cohérent.
OriginalL'auteur Sammaye