-
Notifications
You must be signed in to change notification settings - Fork 0
/
t_motivation.clj
66 lines (57 loc) · 2.02 KB
/
t_motivation.clj
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
(ns persistroids.t-motivation
(:require [midje.sweet :refer :all]
[taoensso.timbre :as logger]
[persistroids.core :as p]
[persistroids.connector :as connector])
(:import (java.io File)))
(background
(around :facts
(let [fs-db (.getAbsolutePath
(File/createTempFile "bogus" ".db"))]
(logger/with-level :info
(spit fs-db "")
(time ?form)))))
;The basic premise of persistroids:
; it is the same persistence,
; but on steroids
; (this ns shows persistroids delivers an order of magnitude faster on my machine)
(defn do-some-work
"Read file contents,
add some random BS,
and persist;
X100"
[fs-db read-fn write-fn]
(loop [i 100]
(let [content (read-fn fs-db)
data (str content (rand))]
(if (zero? i)
(count data)
(do (write-fn fs-db data)
(recur (dec i)))))))
(midje.config/at-print-level
:print-facts
(fact
"do-some-work directly to fs, not very fast.."
(do-some-work fs-db
slurp
spit)
(count (slurp fs-db)) => (roughly 2000 500))
(let [fs-connector (reify connector/Connector
(get-id [this] "fs-connector")
(read [this fs-db]
(slurp fs-db))
(write [this fs-db value]
[fs-db value])
(flush [this writes]
(doseq [[fs-db data] writes]
(spit fs-db data))))
persistroids (p/init :connectors [fs-connector])]
(fact
"do-some-work with persistroids not only works, but is fast!"
(do-some-work fs-db
(partial p/read persistroids)
(partial p/write persistroids))
(p/flush-now persistroids)
(count (slurp fs-db)) => (roughly 2000 500))
(p/shutdown persistroids))
)