-
Notifications
You must be signed in to change notification settings - Fork 0
/
doc.go
74 lines (58 loc) · 2.42 KB
/
doc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
Package hyperleveldb is a fork of the levigo package with the identifiers changed to target hyperleveldb and
the package name changed to hyperleveldb.
This was accomplished by running a sed script over the source code.
Many thanks to Jeff Hodges for creating levigo without which this package would not exist.
Original package documentation follows.
Package hyperleveldb provides the ability to create and access LevelDB databases.
hyperleveldb.Open opens and creates databases.
opts := hyperleveldb.NewOptions()
opts.SetCache(hyperleveldb.NewLRUCache(3<<30))
opts.SetCreateIfMissing(true)
db, err := hyperleveldb.Open("/path/to/db", opts)
The DB struct returned by Open provides DB.Get, DB.Put and DB.Delete to modify
and query the database.
ro := hyperleveldb.NewReadOptions()
wo := hyperleveldb.NewWriteOptions()
// if ro and wo are not used again, be sure to Close them.
data, err := db.Get(ro, []byte("key"))
...
err = db.Put(wo, []byte("anotherkey"), data)
...
err = db.Delete(wo, []byte("key"))
For bulk reads, use an Iterator. If you want to avoid disturbing your live
traffic while doing the bulk read, be sure to call SetFillCache(false) on the
ReadOptions you use when creating the Iterator.
ro := hyperleveldb.NewReadOptions()
ro.SetFillCache(false)
it := db.NewIterator(ro)
defer it.Close()
it.Seek(mykey)
for it = it; it.Valid(); it.Next() {
munge(it.Key(), it.Value())
}
if err := it.GetError(); err != nil {
...
}
Batched, atomic writes can be performed with a WriteBatch and
DB.Write.
wb := hyperleveldb.NewWriteBatch()
// defer wb.Close or use wb.Clear and reuse.
wb.Delete([]byte("removed"))
wb.Put([]byte("added"), []byte("data"))
wb.Put([]byte("anotheradded"), []byte("more"))
err := db.Write(wo, wb)
If your working dataset does not fit in memory, you'll want to add a bloom
filter to your database. NewBloomFilter and Options.SetFilterPolicy is what
you want. NewBloomFilter is amount of bits in the filter to use per key in
your database.
filter := hyperleveldb.NewBloomFilter(10)
opts.SetFilterPolicy(filter)
db, err := hyperleveldb.Open("/path/to/db", opts)
If you're using a custom comparator in your code, be aware you may have to
make your own filter policy object.
This documentation is not a complete discussion of LevelDB. Please read the
LevelDB documentation <http://code.google.com/p/hyperleveldb> for information on
its operation. You'll find lots of goodies there.
*/
package hyperleveldb