Skip to content

Commit 83c9535

Browse files
committed
Updated examples and README for v2
1 parent 6263a9f commit 83c9535

File tree

5 files changed

+62
-71
lines changed

5 files changed

+62
-71
lines changed

README.md

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Motivation for creating this project was the need for a persistent priority queu
66

77
Instead 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")
4345
defer 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

6258
Pop an item:
@@ -89,11 +85,11 @@ item, err := s.PeekByID(1)
8985
Update 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

9995
Delete the stack and underlying database:
@@ -116,20 +112,14 @@ q, err := goque.OpenQueue("data_dir")
116112
defer 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

135125
Dequeue an item:
@@ -162,11 +152,11 @@ item, err := q.PeekByID(1)
162152
Update 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

172162
Delete the queue and underlying database:
@@ -202,7 +192,11 @@ item, err := goque.NewPriorityItemObject(Object{X:1}, 0)
202192
Enqueue 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

208202
Dequeue an item:
@@ -214,7 +208,7 @@ item, err := pq.DequeueByPriority(0)
214208
...
215209
fmt.Println(item.ID) // 1
216210
fmt.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]
218212
fmt.Println(item.Value) // [105 116 101 109 32 118 97 108 117 101]
219213
fmt.Println(item.ToString()) // item value
220214

@@ -238,11 +232,11 @@ item, err := pq.PeekByPriorityID(0, 1)
238232
Update 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

248242
Delete 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
```
259253
go test -bench=.
260254
PASS
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

example_object_test.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,39 +22,34 @@ func Example_object() {
2222
Y int
2323
}
2424

25-
// Create a new item with our struct.
26-
item, err := goque.NewItemObject(object{X: 1, Y: 2})
25+
// Enqueue an object.
26+
item, err := q.EnqueueObject(object{X: 1, Y: 2})
2727
if err != nil {
2828
fmt.Println(err)
2929
return
3030
}
3131

32-
// Enqueue the item.
33-
err = q.Enqueue(item)
34-
if err != nil {
35-
fmt.Println(err)
36-
return
37-
}
38-
39-
fmt.Println(item.ID) // 1
40-
fmt.Println(item.Key) // [0 0 0 0 0 0 0 1]
41-
fmt.Println(item.Value) // [105 116 101 109 32 118 97 108 117 101]
32+
fmt.Println(item.ID) // 1
33+
fmt.Println(item.Key) // [0 0 0 0 0 0 0 1]
4234

43-
// Dequeue the item.
35+
// Dequeue an item.
4436
deqItem, err := q.Dequeue()
4537
if err != nil {
4638
fmt.Println(err)
4739
return
4840
}
4941

50-
// Create a variable to hold our decoded struct in.
42+
// Create variable to hold our object in.
5143
var obj object
5244

53-
// Decode the item into our struct type.
45+
// Decode item into our struct type.
5446
if err := deqItem.ToObject(&obj); err != nil {
5547
fmt.Println(err)
5648
return
5749
}
5850

5951
fmt.Printf("%+v\n", obj) // {X:1 Y:2}
52+
53+
// Delete the queue and its database.
54+
q.Drop()
6055
}

example_pqueue_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,21 @@ func Example_priorityQueue() {
1616
}
1717
defer pq.Close()
1818

19-
// Create a new item.
20-
item := goque.NewPriorityItem([]byte("item value"), 0)
21-
2219
// Enqueue the item.
23-
err = pq.Enqueue(item)
20+
item, err := pq.Enqueue(0, []byte("item value"))
2421
if err != nil {
2522
fmt.Println(err)
2623
return
2724
}
2825

2926
fmt.Println(item.ID) // 1
3027
fmt.Println(item.Priority) // 0
31-
fmt.Println(item.Key) // [0 0 0 0 0 0 0 1]
28+
fmt.Println(item.Key) // [0 58 0 0 0 0 0 0 0 1]
3229
fmt.Println(item.Value) // [105 116 101 109 32 118 97 108 117 101]
3330
fmt.Println(item.ToString()) // item value
3431

3532
// Change the item value in the queue.
36-
err = pq.Update(item, []byte("new item value"))
33+
item, err = pq.Update(item.Priority, item.ID, []byte("new item value"))
3734
if err != nil {
3835
fmt.Println(err)
3936
return
@@ -49,4 +46,7 @@ func Example_priorityQueue() {
4946
}
5047

5148
fmt.Println(deqItem.ToString()) // new item value
49+
50+
// Delete the queue and its database.
51+
pq.Drop()
5252
}

example_queue_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,8 @@ func Example_queue() {
1616
}
1717
defer q.Close()
1818

19-
// Create a new item.
20-
item := goque.NewItem([]byte("item value"))
21-
22-
// Enqueue the item.
23-
err = q.Enqueue(item)
19+
// Enqueue an item.
20+
item, err := q.Enqueue([]byte("item value"))
2421
if err != nil {
2522
fmt.Println(err)
2623
return
@@ -32,7 +29,7 @@ func Example_queue() {
3229
fmt.Println(item.ToString()) // item value
3330

3431
// Change the item value in the queue.
35-
err = q.Update(item, []byte("new item value"))
32+
item, err = q.Update(item.ID, []byte("new item value"))
3633
if err != nil {
3734
fmt.Println(err)
3835
return
@@ -48,4 +45,7 @@ func Example_queue() {
4845
}
4946

5047
fmt.Println(deqItem.ToString()) // new item value
48+
49+
// Delete the queue and its database.
50+
q.Drop()
5151
}

example_stack_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,8 @@ func Example_stack() {
1616
}
1717
defer s.Close()
1818

19-
// Create a new item.
20-
item := goque.NewItem([]byte("item value"))
21-
22-
// Push it onto the stack.
23-
err = s.Push(item)
19+
// Push an item onto the stack.
20+
item, err := s.Push([]byte("item value"))
2421
if err != nil {
2522
fmt.Println(err)
2623
return
@@ -32,7 +29,7 @@ func Example_stack() {
3229
fmt.Println(item.ToString()) // item value
3330

3431
// Change the item value in the stack.
35-
err = s.Update(item, []byte("new item value"))
32+
item, err = s.Update(item.ID, []byte("new item value"))
3633
if err != nil {
3734
fmt.Println(err)
3835
return
@@ -48,4 +45,7 @@ func Example_stack() {
4845
}
4946

5047
fmt.Println(popItem.ToString()) // new item value
48+
49+
// Delete the stack and its database.
50+
s.Drop()
5151
}

0 commit comments

Comments
 (0)