2010-10-18 5 views
5

Je cherche une bibliothèque intégrable pour faire des E/S de fichiers atomiques à partir de Java. J'ai besoin de la bibliothèque pour prendre en charge les fonctionnalités suivantes.recherche d'un fichier de page atomique/journalisé dans Java

  • gestion de page de base - allouer/pages libres et lecture/écriture
  • atomique (tout ou rien) écrit (essentiellement journalisé I/O)
  • Un format de page binaire simple (doit être lisible par C++)

  • Il n'a pas besoin d'être rapide (ou simultanée), juste simple et fiable.

Quelqu'un at-il utilisé quelque chose dans le passé qui correspond à la facture?

choses que j'ai regardé dans

J'ai trouvé les entrailles pour le projet projet kaha db être utile, mais le développement semble avoir passé à un fusesoure appelé hawtdb. Hawt semble actuellement utiliser des E/S mappées en mémoire, ce qui semble bon au début, mais limite la taille du fichier de page accessible à 2 Go sauf si vous allez sur un système JVM + 64 bits (en raison des limitations d'espace d'adressage de la JVM).

Certaines des alternatives que je considère sont le projet Cassandra, mais je ne sais pas si c'est embarquable. J'ai regardé dans derby (qui a créé beaucoup de fichiers lors de l'exécution) et H2 (qui semblait prometteur, mais je n'ai pas regardé trop profondément). Ceux-ci semblaient avoir des formats de fichiers de pages relativement complexes et semblaient fournir beaucoup plus que ce dont j'avais besoin. MySQL a fourni des documents pour le format de fichier de la page, mais il était aussi un peu complexe.

Répondre

2

HOWL

HOWL est une implémentation de l'enregistreur fournissant des fonctionnalités requises par le projet ObjectWeb JOTM, avec une API publique qui est généralement utilisable par tout gestionnaire de transactions. HOWL utilise des journaux binaires non formatés pour optimiser les performances et spécifie une API de journalisation avec les méthodes nécessaires pour prendre en charge les opérations de restauration JOTM.

HOWL est destiné à être utilisé pour l'enregistrement des données temporaires telles que des événements de transactions XA

+0

Ceci est en fait une ancienne implémentation, écrite en partie par le même auteur que kaha et hawt. C'est toujours utile. – Justin

0
  • Berkley DB? (La version traditionnelle avec JNI, pas la version Java si vous voulez aussi accéder via C++). Je ne l'ai pas utilisé, mais semble répondre à vos besoins de plus près que certaines des alternatives que vous avez énumérées.

  • SQLLite? Base de données similaire mais plus relationnelle. Natif, mais avec des liaisons Java.

Juste quelques autres idées. Ceux-ci pourraient ne pas fournir un accès assez bas pour les e/o de fichiers basés sur la page.

+1

Vous pouvez également regarder des réponses à cette question dans le cas où vous avez décidé de construire votre propre: http: // stackoverflow.com/questions/3759311/memory-mapped-files-et-atomic-write-of-single-blocks – kaliatech

+0

Je dois dire que SQLLite a vraiment du code bien commenté, il se lit plus comme un roman que comme une source. – Justin

0

Un oldie, mais goodie JDBM

+0

Excellent commentaire dans leur javadoc 'L'ensemble des enregistrements sales sur la liste d'utilisation constitue une transaction. Plus tard, nous enverrons ces enregistrements à quelque chose de récupération. » – Justin