現在boltdb
、バケットにさまざまなエントリを格納するために使用しています。
データベースの読み取りと更新でゴルーチンとチャネルを使用するにはどうすればよいですか?
現在boltdb
、バケットにさまざまなエントリを格納するために使用しています。
データベースの読み取りと更新でゴルーチンとチャネルを使用するにはどうすればよいですか?
一般的に、次の点に注意すれば可能です。
すべてのアクセスは、独自のトランザクションで行う必要があります。トランザクションはゴルーチン間で共有されるべきではありません (それらが読み取り専用であるか読み書き可能であるかに関係なく)。
Boltdb は、特定の時点で 1 つのライターのみを許容します。複数の並行トランザクションが同時に書き込もうとすると、シリアル化されます。データベースの一貫性は保証されますが、書き込み操作を並列化できないため、パフォーマンスに影響します。
読み取り専用トランザクションは同時に実行されます (場合によっては並列化されます)。
デッドロック状態を回避するために、特定のゴルーチンで同時に 1 つのトランザクションのみを開きます。