Lorsque j'utilise le code suivant ci-dessous, je prévois n'avoir qu'une entrée dans la base de données. J'utilise l'implémentation LevelDB syndtr/goleveldb pour Go.Erreur d'écrasement/de lancement sur une clé en double dans Go LevelDB
for count := 0; count < 5; count++ {
err := db.Put([]byte("key"), []byte("value"))
if err != nil {
t.Error(err)
}
}
Au lieu de cela, un hexdump révèle qu'il ya 5 entrées:
00000000 a8 ef d2 d4 17 00 01 01 00 00 00 00 00 00 00 01 |................|
00000010 00 00 00 01 03 6b 65 79 05 76 61 6c 75 65 10 23 |.....key.value.#|
00000020 44 b5 17 00 01 02 00 00 00 00 00 00 00 01 00 00 |D...............|
00000030 00 01 03 6b 65 79 05 76 61 6c 75 65 77 be 34 95 |...key.valuew.4.|
00000040 17 00 01 03 00 00 00 00 00 00 00 01 00 00 00 01 |................|
00000050 03 6b 65 79 05 76 61 6c 75 65 08 35 86 60 17 00 |.key.value.5.`..|
00000060 01 04 00 00 00 00 00 00 00 01 00 00 00 01 03 6b |...............k|
00000070 65 79 05 76 61 6c 75 65 6f 8c f6 00 17 00 01 05 |ey.valueo.......|
00000080 00 00 00 00 00 00 00 01 00 00 00 01 03 6b 65 79 |.............key|
00000090 05 76 61 6c 75 65 |.value|
00000096
De ma compréhension LevelDB
devrait par défaut remplacer une clé en double ou au moins une erreur.
Comment puis-je contrôler quand la valeur est écrasée ou comment puis-je obtenir une erreur (autre que la vérification db.Has(key)
chaque fois que je db.Put(key)
? Est-ce que compaction
rien à voir avec cela?