@@ -6,6 +6,8 @@ Motivation for creating this project was the need for a persistent priority queu
66
77Instead of using an in-memory heap structure to store data, everything is stored using the [ Go port of LevelDB] ( https://github.com/syndtr/goleveldb ) . This results in very little memory being used no matter the size of the database, while read and write performance remains near constant.
88
9+ ** IMPORTANT UPDATE: Goque has been updated to v2, which introduces a completely new API for the Enqueue, Push, and Update methods. Please refer the [ v2 release] ( https://github.com/beeker1121/goque/releases/tag/v2.0.0 ) for more information on exactly what has been changed. The prior API can still be found at [ release v1.0.2] ( https://github.com/beeker1121/goque/releases/tag/v1.0.2 ) .**
10+
911## Features
1012
1113- Provides stack (LIFO), queue (FIFO), and priority queue structures.
@@ -43,20 +45,14 @@ s, err := goque.OpenStack("data_dir")
4345defer s.Close ()
4446```
4547
46- Create a new item:
48+ Push an item:
4749
4850``` go
49- item := goque. NewItem ([]byte (" item value" ))
51+ item , err := s. Push ([]byte (" item value" ))
5052// or
51- item := goque. NewItemString (" item value" )
53+ item , err := s. PushString (" item value" )
5254// or
53- item , err := goque.NewItemObject (Object{X:1 })
54- ```
55-
56- Push an item:
57-
58- ``` go
59- err := s.Push (item)
55+ item , err := s.PushObject (Object{X:1 })
6056```
6157
6258Pop an item:
@@ -89,11 +85,11 @@ item, err := s.PeekByID(1)
8985Update an item in the stack:
9086
9187``` go
92- err := s.Update (item , []byte (" new value" ))
88+ item , err := s.Update (1 , []byte (" new value" ))
9389// or
94- err := s.UpdateString (item , " new value" )
90+ item , err := s.UpdateString (1 , " new value" )
9591// or
96- err := s.UpdateObject (item , Object {X:2 })
92+ item , err := s.UpdateObject (1 , Object {X:2 })
9793```
9894
9995Delete the stack and underlying database:
@@ -116,20 +112,14 @@ q, err := goque.OpenQueue("data_dir")
116112defer q.Close ()
117113```
118114
119- Create a new item:
115+ Enqueue an item:
120116
121117``` go
122- item := goque. NewItem ([]byte (" item value" ))
118+ item , err := q. Enqueue ([]byte (" item value" ))
123119// or
124- item := goque. NewItemString (" item value" )
120+ item , err := q. EnqueueString (" item value" )
125121// or
126- item , err := goque.NewItemObject (Object{X:1 })
127- ```
128-
129- Enqueue an item:
130-
131- ``` go
132- err := q.Enqueue (item)
122+ item , err := q.EnqueueObject (Object{X:1 })
133123```
134124
135125Dequeue an item:
@@ -162,11 +152,11 @@ item, err := q.PeekByID(1)
162152Update an item in the queue:
163153
164154``` go
165- err := q.Update (item , []byte (" new value" ))
155+ item , err := q.Update (1 , []byte (" new value" ))
166156// or
167- err := q.UpdateString (item , " new value" )
157+ item , err := q.UpdateString (1 , " new value" )
168158// or
169- err := q.UpdateObject (item , Object {X:2 })
159+ item , err := q.UpdateObject (1 , Object {X:2 })
170160```
171161
172162Delete the queue and underlying database:
@@ -202,7 +192,11 @@ item, err := goque.NewPriorityItemObject(Object{X:1}, 0)
202192Enqueue an item:
203193
204194``` go
205- err := pq.Enqueue (item)
195+ item , err := pq.Enqueue (0 , []byte (" item value" ))
196+ // or
197+ item , err := pq.EnqueueString (0 , " item value" )
198+ // or
199+ item , err := pq.EnqueueObject (0 , Object {X:1 })
206200```
207201
208202Dequeue an item:
@@ -214,7 +208,7 @@ item, err := pq.DequeueByPriority(0)
214208...
215209fmt.Println (item.ID ) // 1
216210fmt.Println (item.Priority ) // 0
217- fmt.Println (item.Key ) // [0 0 0 0 0 0 0 1]
211+ fmt.Println (item.Key ) // [0 58 0 0 0 0 0 0 0 1]
218212fmt.Println (item.Value ) // [105 116 101 109 32 118 97 108 117 101]
219213fmt.Println (item.ToString ()) // item value
220214
@@ -238,11 +232,11 @@ item, err := pq.PeekByPriorityID(0, 1)
238232Update an item in the priority queue:
239233
240234``` go
241- err := pq.Update (item , []byte (" new value" ))
235+ item , err := pq.Update (0 , 1 , []byte (" new value" ))
242236// or
243- err := pq.UpdateString (item , " new value" )
237+ item , err := pq.UpdateString (0 , 1 , " new value" )
244238// or
245- err := pq.UpdateObject (item , Object {X:2 })
239+ item , err := pq.UpdateObject (0 , 1 , Object {X:2 })
246240```
247241
248242Delete the priority queue and underlying database:
@@ -258,12 +252,13 @@ Benchmarks were run on a Google Compute Engine n1-standard-1 machine (1 vCPU 3.7
258252```
259253go test -bench=.
260254PASS
261- BenchmarkPriorityQueueEnqueue 200000 8102 ns/op 442 B/op 5 allocs/op
262- BenchmarkPriorityQueueDequeue 200000 18602 ns/op 1161 B/op 17 allocs/op
263- BenchmarkQueueEnqueue 200000 7582 ns/op 399 B/op 5 allocs/op
264- BenchmarkQueueDequeue 200000 19317 ns/op 1071 B/op 17 allocs/op
265- BenchmarkStackPush 200000 7847 ns/op 399 B/op 5 allocs/op
266- BenchmarkStackPop 200000 18950 ns/op 1081 B/op 17 allocs/op
255+ BenchmarkPriorityQueueEnqueue 200000 8104 ns/op 522 B/op 7 allocs/op
256+ BenchmarkPriorityQueueDequeue 200000 18622 ns/op 1166 B/op 17 allocs/op
257+ BenchmarkQueueEnqueue 200000 8049 ns/op 487 B/op 7 allocs/op
258+ BenchmarkQueueDequeue 200000 18970 ns/op 1089 B/op 17 allocs/op
259+ BenchmarkStackPush 200000 8145 ns/op 487 B/op 7 allocs/op
260+ BenchmarkStackPop 200000 18947 ns/op 1097 B/op 17 allocs/op
261+ ok github.com/beeker1121/goque 22.549s
267262```
268263
269264## Thanks
@@ -272,4 +267,5 @@ BenchmarkStackPop 200000 18950 ns/op 1081
272267** bogdanovich** ([ https://github.com/bogdanovich/siberite ] ( https://github.com/bogdanovich/siberite ) ) - Server based queue for Go using LevelDB
273268** connor4312** ([ https://github.com/connor4312 ] ( https://github.com/connor4312 ) ) - Recommending BoltDB/LevelDB, helping with structure
274269** bwmarrin** ([ https://github.com/bwmarrin ] ( https://github.com/bwmarrin ) ) - Recommending BoltDB/LevelDB
275- ** zeroZshadow** ([ https://github.com/zeroZshadow ] ( https://github.com/zeroZshadow ) ) - Code review and optimization
270+ ** zeroZshadow** ([ https://github.com/zeroZshadow ] ( https://github.com/zeroZshadow ) ) - Code review and optimization
271+ ** nstafie** ([ https://github.com/nstafie ] ( https://github.com/nstafie ) ) - Help with structure
0 commit comments