12

多かれ少なかれ以下の形式の構造を作成します。

type FileState struct {
    LastModified int64
    Hash string
    Path string
}

これらの値をファイルに書き込み、後続の呼び出しでそれらを読み取りたいと考えています。私の最初の計画は、それらをマップに読み込み、キー (パス) を使用して値 (ハッシュと LastModified) を検索することです。Goでこれを行うための巧妙な方法はありますか?

そうでない場合、どのファイル形式を推奨できますか? 以前のプロジェクトでいくつかのキー/値ファイル ストアについて読み、実験しましたが、Go は使用していません。現在、私の要件はおそらくかなり単純なので、大規模なデータベース サーバー システムはやり過ぎです。すばやく簡単に読み書きできるもの (Windows、Mac、Linux) が欲しいだけです。複数のプラットフォームに展開する必要があるため、go 以外の依存関係を最小限に抑えようとしています。

XML、CSV、JSON を検討しました。Go の gob パッケージを簡単に調べたところ、Go パッケージ ダッシュボードに BSON パッケージがあることに気付きましたが、それらが該当するかどうかはわかりません。

ここでの私の主な目標は、迅速に起動して実行することです。つまり、記述する必要があるコードの量を最小限に抑え、展開を容易にすることです。

4

3 に答える 3

10

データ全体がメモリに収まる限り、問題はありません。インメモリ マップを使用し、スナップショットをディスクに定期的に書き込む (たとえば、gobパッケージを使用する) ことをお勧めします。Andrew Gerrand によるPractical Go Programmingの講演では、この手法が使用されています。

これらのファイルに別のプログラムでアクセスする必要がある場合は、json や csv などの一般的なエンコーディングを使用することをお勧めします。Go 内からこれらのファイルにアクセスする必要がある場合は、多くの優れた機能を備えた優れた gob パッケージを使用します。

データが大きくなるとすぐに、変更のたびに常にデータベース全体をディスクに書き込むことはお勧めできません。また、データが RAM に収まらなくなる可能性があります。その場合は、別の Go 開発者である Nigel Tao によるleveldbキー値データベース パッケージを参照することをお勧めします。現在、活発に開発されていますが (まだ使用可能ではありません)、トランザクションや自動圧縮などの高度な機能も提供されます。また、leveldb の設計により、読み取り/書き込みスループットは非常に優れているはずです。

于 2011-10-13T15:45:41.920 に答える
2

私が書いた gkvlite と呼ばれる順序付けされたキー値の永続化ライブラリがあります -
https://github.com/steveyen/gkvlite

于 2013-05-03T06:59:04.580 に答える
1

JSONは非常に単純ですが、変数名が繰り返されるため、ファイルが大きくなります。XMLには利点がありません。CSVを使用する必要がありますが、これも非常に簡単です。あなたのプログラムは1ページ未満になります。

しかし、実際には、それはあなたの変更に依存します。多くの変更を行い、それらをディスクに同期して保存する必要がある場合は、単一のファイルよりも少し複雑なものが必要になる場合があります。マップが主に読み取り専用である場合、またはめったに(毎秒ではなく)ファイルにダンプする余裕がある場合は、メモリ内のマップに沿った単一のcsvファイルで物事をシンプルかつ効率的に保つことができます。

ところで、これを行うには、goのcsvパッケージを使用します。

于 2011-10-13T13:05:38.987 に答える