-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathindex.html
239 lines (197 loc) · 14.4 KB
/
index.html
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
---
layout: landing-page
title: SirixDB - An Evolutionary, Temporal, JSON Store
---
<!-- Main -->
<article id="main">
<header class="special container">
<span class="icon solid fa-chart-bar"></span>
<h2>SirixDB keeps storage space to a minimum while retaining the full history of your data.</h2>
<br />
It allows <strong>time-travel</strong> queries on its binary <strong>XML</strong> and <strong>JSON</strong> encoding.
<br />
It is released for free under <a href="https://opensource.org/licenses/BSD-3-Clause">The 3-Clause BSD License</a> license. Have fun!</p>
</header>
<!-- One -->
<section class="wrapper style2 container special-alt">
<div class="row gtr-50">
<div class="col-8 col-12-narrower">
<header>
<h2>Keep the full history of your data for time travel analysis, audits, to correct human or application errors...</h2>
</header>
<p>SirixDB keeps storage space to a minimum while supporting the reconstruction of any revision in linear time.</p>
<p>Furthermore, it allows time travel queries such that you can analyze the history of your data efficiently to predict the future or for audits.</p>
<p>Not enough? What about correcting any human or application errors or comparing any revision of your XML or JSON documents efficiently?</p>
<footer>
<ul class="buttons">
<li><a href="#more" class="button fit scrolly">Find Out More</a></li>
</ul>
</footer>
</div>
<div class="col-4 col-12-narrower imp-narrower">
<ul class="featured-icons">
<li><span class="icon solid fa-clock"><span class="label">Time Travel</span></span></li>
<li><span class="icon solid fa-rocket"><span class="label">Fast</span></span></li>
<li><span class="icon solid fa-laptop"><span class="label">JVM-based (available on any platform)</span></span></li>
<li><span class="icon solid fa-database"><span class="label">Versioned, temporal database system</span></span></li>
<li><span class="icon solid fa-cloud"><span class="label">Open Source and free on Github</span></span></li>
<li><span class="icon solid fa-archive"><span class="label">Replication/Partitioning soon to be added</span></span></li>
</ul>
</div>
</div>
</section>
<section class="wrapper style3 container special-alt">
<header><h2>Supported by</h2></header>
<p><img src="https://www.yourkit.com/images/yklogo.png" width="185" height="44"></p>
<p>SirixDB is supported by YourKit: YourKit supports open-source projects with innovative and intelligent tools
for monitoring and profiling Java and .NET applications.
YourKit is the creator of <a href="https://www.yourkit.com/java/profiler/">YourKit Java Profiler</a>,
<a href="https://www.yourkit.com/.net/profiler/">YourKit .NET Profiler</a>,
and <a href="https://www.yourkit.com/youmonitor/">YourKit YouMonitor</a>.</p>
<p>SirixDB is supported by JetBrains. They support Open Source with licenses for their products and we love Kotlin.</p>
</section>
<section class="wrapper style3 container special">
<header><h2>Compact snapshots / efficient time-travel queries</h2></header>
<div class="img_container">
<p><img src="images/evolution-of-state.webp" style="margin: 3em 3em; width: 70%"/></p>
</div>
<p>The following time-travel query to be executed on our binary JSON representation of <a href="https://raw.githubusercontent.com/sirixdb/sirix/master/bundles/sirix-core/src/test/resources/json/twitter.json">Twitter sample data</a> gives an initial impression of what's possible:</p>
<div class="language-xquery highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">let</span><span class="w"> </span><span class="nv">$doc</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nf">jn:open</span><span class="p">(</span><span class="s">'database'</span><span class="o">,</span><span class="s">'resource'</span><span class="o">,</span><span class="w"> </span><span class="nf">xs:dateTime</span><span class="p">(</span><span class="s">'2019-04-13T16:24:27Z'</span><span class="p">))</span><span class="w">
</span><span class="k">let</span><span class="w"> </span><span class="nv">$statuses</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nv">$doc</span><span class="o">.</span><span class="nt">statuses</span><span class="w">
</span><span class="k">let</span><span class="w"> </span><span class="nv">$foundStatus</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="nv">$status</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nv">$statuses</span><span class="w">
</span><span class="k">let</span><span class="w"> </span><span class="nv">$dateTimeCreated</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nf">xs:dateTime</span><span class="p">(</span><span class="nv">$status</span><span class="o">.</span><span class="nt">created_at</span><span class="p">)</span><span class="w">
</span><span class="k">where</span><span class="w"> </span><span class="nv">$dateTimeCreated</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nf">xs:dateTime</span><span class="p">(</span><span class="s">"2018-02-01T00:00:00"</span><span class="p">)</span><span class="w">
</span><span class="ow">and</span><span class="w"> </span><span class="nf">not</span><span class="p">(</span><span class="nf">exists</span><span class="p">(</span><span class="nf">jn:previous</span><span class="p">(</span><span class="nv">$status</span><span class="p">)))</span><span class="w">
</span><span class="k">order</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="nv">$dateTimeCreated</span><span class="w">
</span><span class="k">return</span><span class="w"> </span><span class="nv">$status</span><span class="w">
</span><span class="k">return</span><span class="w"> </span><span class="p">{</span><span class="s">"revision"</span><span class="o">:</span><span class="w"> </span><span class="nf">sdb:revision</span><span class="p">(</span><span class="nv">$foundStatus</span><span class="p">)</span><span class="o">,</span><span class="w"> </span><span class="nv">$foundStatus</span><span class="p">{</span><span class="k">text</span><span class="p">}}</span><span class="w">
</span></code></pre></div></div>
<p>The query opens a database and therein a resource in a specific revision based on a timestamp (<code class="highlighter-rouge">2019–04–13T16:24:27Z</code>) and searches for all statuses, which have a <code class="highlighter-rouge">created_at</code> timestamp, that has to be greater than the 1st of February in 2018 and did not exist in the previous revision. <code class="highlighter-rouge">.</code> is a dereferencing operator used to dereference keys in JSON objects. Array values can be accessed as shown or through specifying an index, starting with zero: <code class="highlighter-rouge">array[[0]]</code>, for instance, specifies the first value of the array.</p>
</section>
<!-- Two -->
<section class="wrapper style1 container special" id="more">
<div class="row">
<div class="col-4 col-12-narrower">
<section>
<span class="icon solid featured fa-check"></span>
<header>
<h3>Lightweight Buffer Manager</h3>
</header>
<p>Page-fragments are referenced using in-memory references and a lightweight buffer manager, which can reclaim the used heap space, once a page has to be evicted.</p>
</section>
</div>
<div class="col-4 col-12-narrower">
<section>
<span class="icon solid featured fa-check"></span>
<header>
<h3>No Write-Ahead-Log (WAL) needed</h3>
</header>
<p>An UberPage is the main entry point into a resource. <strong>It is swapped atomically as the last action of a commit</strong>.</p>
</section>
</div>
<div class="col-4 col-12-narrower">
<section>
<span class="icon solid featured fa-check"></span>
<header>
<h3>Persistent Tree-Structure With Variable Sized Pages</h3>
</header>
<p>SirixDB uses <strong> variable-sized page-fragments</strong>, stored in a huge <strong>persistent and durable tree-structure</strong> for indexing revisions as well as data and the nodes of secondary indexes.</p>
</section>
</div>
</div>
<div class="row">
<div class="col-4 col-12-narrower">
<section>
<span class="icon solid featured fa-check"></span>
<header>
<h3>Versioning</h3>
</header>
<p>SirixDB versions data and index structures on a per revision and record level. As such, versioning takes place at a fine-granular level. Furthermore, through a novel versioning algorithm called <em>sliding snapshot</em>, it can avoid write and read peaks.</p>
</section>
</div>
<div class="col-4 col-12-narrower">
<section>
<span class="icon solid featured fa-check"></span>
<header>
<h3>Time travel queries</h3>
</header>
<p>SirixDB allows sophisticated time travel queries such that you can analyze the history of your data or retrieve the differences efficiently.</p>
</section>
</div>
<div class="col-4 col-12-narrower">
<section>
<span class="icon solid featured fa-check"></span>
<header>
<h3>XML / JSON</h3>
</header>
<p>You decide how your data looks like and which format fits best. SirixDB currently supports both the import of XML as well as JSON data.</p>
</section>
</div>
</div>
</section>
<!-- Three -->
<section class="wrapper style3 container special">
<header class="major">
<h2>Powerful APIs</h2>
</header>
<div class="row">
<div class="col-6 col-12-narrower">
<section>
<a href="docs/rest-api.html" class="image featured"><img src="images/shutterstock_552791071-scaled.webp" alt="REST" /></a>
<header>
<h3>REST</h3>
</header>
<p>SirixDB provides an asynchronous, RESTful API, which is non-blocking. It is built with <a href="https://vertx.io">Vert.x</a>, <a href="https://kotlinlang.org">Kotlin</a> (coroutines) and <a href="https://www.keycloak.org">Keycloak</a>.</p>
</section>
</div>
<div class="col-6 col-12-narrower">
<section>
<a href="docs/jsoniq-api.html" class="image featured"><img src="images/shutterstock_667831573-scaled.webp" alt="XQuery / JSONiq" /></a>
<header>
<h3>XQuery / JSONiq</h3>
</header>
<p>Several extensions to an XQuery-processor called <a href="http://brackit.org">Brackit</a> are available. SirixDB, for instance, supports navigation via additional temporal XPath axes or XQuery functions for JSON data to navigate not only in space but also in time. Furthermore, SirixDB offers several additional precompiled functions to simplify the analysis of your temporal data. The API also provides a very convenient way to interact with SirixDB. Think of it as an in-memory representation of a DOM.</p>
</section>
</div>
</div>
<div class="row">
<div class="col-6 col-12-narrower">
<section>
<a href="docs/transactional-cursor-api.html" class="image featured"><img src="images/shutterstock_534465157-scaled.webp" alt="Transactional cursor API" /></a>
<header>
<h3>Transactional cursor API</h3>
</header>
<p>SirixDB provides a transactional low-level, cursor-based API which is very powerful. SirixDB not only provides standard XPath axes. It also provides additional temporal enhancements to navigate in time. Furthermore, several other axes, for instance, a LevelOrder axis, a PostorderAxis, and a DescendantAxis, which can skip whole subtrees, exists. Additionally, SirixDB provides several filters, a NestedAxis, a PredicateAxis and much more.</p>
</section>
</div>
<div class="col-6 col-12-narrower">
<section>
<a href="#" class="image featured"><img src="images/shutterstock_709259401-scaled.webp" alt="Diffing-API" /></a>
<header>
<h3>Diffing-API</h3>
</header>
<p>SirixDB provides a way to import several revisions of an XML document with the help of a diffing algorithm called Fast Matching Simple EditScript. With the help of this diffing-algorithm, SirixDB can store the encountered differences in the tree structures instead of storing the whole revision.</p>
<p>Once you've stored several revisions in SirixDB, either through the import based on the diffing algorithm or simply through working with SirixDB in the first place, you can quickly compute diffs between any two revisions. SirixDB makes use of its stable node identifiers and optionally stored hashes. Each time the hashes of two nodes are equal, the whole subtrees in both revisions can be skipped while traversing both tree structures.</p>
</section>
</div>
</div>
<footer class="major">
<ul class="buttons">
<li><a href="/docs/index.html" class="button">See More</a></li>
</ul>
</footer>
</section>
</article>
<!-- CTA -->
<section id="cta">
<header>
<h2>Ready for using <strong>SirixDB</strong>?</h2>
<p>Give it a try and let us know your thoughts.</p>
</header>
<footer>
<ul class="buttons">
<li><a href="/docs/index.html" class="button special">First steps</a></li>
<li><a href="https://github.com/sirixdb/sirix" class="button">Fork me on Github</a></li>
</ul>
</footer>
</section>