Added relations mapping idea.
[sixth-data.git] / doc / index.html
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <title>Sixth - system for data storage, computation, exploration and interaction</title>
5 <!-- 2017-07-29 Sat 13:31 -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1">
8 <meta name="generator" content="Org-mode">
9 <meta name="author" content="Svjatoslav Agejenko">
10 <link href="https://bootswatch.com/darkly/bootstrap.min.css" rel="stylesheet">
11 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
12 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
13 <style type="text/css">
14 footer {background-color: #111 !important;}
15 pre {background-color: #111; color: #ccc;}
16 </style>
17 <style type="text/css">
18 /* org mode styles on top of twbs */
19
20 html {
21     position: relative;
22     min-height: 100%;
23 }
24
25 body {
26     font-size: 18px;
27     margin-bottom: 105px;
28 }
29
30 footer {
31     position: absolute;
32     bottom: 0;
33     width: 100%;
34     height: 101px;
35     background-color: #f5f5f5;
36 }
37
38 footer > div {
39     padding: 10px;
40 }
41
42 footer p {
43     margin: 0 0 5px;
44     text-align: center;
45     font-size: 16px;
46 }
47
48 #table-of-contents {
49     margin-top: 20px;
50     margin-bottom: 20px;
51 }
52
53 blockquote p {
54     font-size: 18px;
55 }
56
57 pre {
58     font-size: 16px;
59 }
60
61 .footpara {
62     display: inline-block;
63 }
64
65 figcaption {
66   font-size: 16px;
67   color: #666;
68   font-style: italic;
69   padding-bottom: 15px;
70 }
71
72 /* from twbs docs */
73
74 .bs-docs-sidebar.affix {
75     position: static;
76 }
77 @media (min-width: 768px) {
78     .bs-docs-sidebar {
79         padding-left: 20px;
80     }
81 }
82
83 /* All levels of nav */
84 .bs-docs-sidebar .nav > li > a {
85     display: block;
86     padding: 4px 20px;
87     font-size: 14px;
88     font-weight: 500;
89     color: #999;
90 }
91 .bs-docs-sidebar .nav > li > a:hover,
92 .bs-docs-sidebar .nav > li > a:focus {
93     padding-left: 19px;
94     color: #A1283B;
95     text-decoration: none;
96     background-color: transparent;
97     border-left: 1px solid #A1283B;
98 }
99 .bs-docs-sidebar .nav > .active > a,
100 .bs-docs-sidebar .nav > .active:hover > a,
101 .bs-docs-sidebar .nav > .active:focus > a {
102     padding-left: 18px;
103     font-weight: bold;
104     color: #A1283B;
105     background-color: transparent;
106     border-left: 2px solid #A1283B;
107 }
108
109 /* Nav: second level (shown on .active) */
110 .bs-docs-sidebar .nav .nav {
111     display: none; /* Hide by default, but at >768px, show it */
112     padding-bottom: 10px;
113 }
114 .bs-docs-sidebar .nav .nav > li > a {
115     padding-top: 1px;
116     padding-bottom: 1px;
117     padding-left: 30px;
118     font-size: 12px;
119     font-weight: normal;
120 }
121 .bs-docs-sidebar .nav .nav > li > a:hover,
122 .bs-docs-sidebar .nav .nav > li > a:focus {
123     padding-left: 29px;
124 }
125 .bs-docs-sidebar .nav .nav > .active > a,
126 .bs-docs-sidebar .nav .nav > .active:hover > a,
127 .bs-docs-sidebar .nav .nav > .active:focus > a {
128     padding-left: 28px;
129     font-weight: 500;
130 }
131
132 /* Nav: third level (shown on .active) */
133 .bs-docs-sidebar .nav .nav .nav {
134     padding-bottom: 10px;
135 }
136 .bs-docs-sidebar .nav .nav .nav > li > a {
137     padding-top: 1px;
138     padding-bottom: 1px;
139     padding-left: 40px;
140     font-size: 12px;
141     font-weight: normal;
142 }
143 .bs-docs-sidebar .nav .nav .nav > li > a:hover,
144 .bs-docs-sidebar .nav .nav .nav > li > a:focus {
145     padding-left: 39px;
146 }
147 .bs-docs-sidebar .nav .nav .nav > .active > a,
148 .bs-docs-sidebar .nav .nav .nav > .active:hover > a,
149 .bs-docs-sidebar .nav .nav .nav > .active:focus > a {
150     padding-left: 38px;
151     font-weight: 500;
152 }
153
154 /* Show and affix the side nav when space allows it */
155 @media (min-width: 992px) {
156     .bs-docs-sidebar .nav > .active > ul {
157         display: block;
158     }
159     /* Widen the fixed sidebar */
160     .bs-docs-sidebar.affix,
161     .bs-docs-sidebar.affix-bottom {
162         width: 213px;
163     }
164     .bs-docs-sidebar.affix {
165         position: fixed; /* Undo the static from mobile first approach */
166         top: 20px;
167     }
168     .bs-docs-sidebar.affix-bottom {
169         position: absolute; /* Undo the static from mobile first approach */
170     }
171     .bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav {
172         margin-top: 0;
173         margin-bottom: 0
174     }
175 }
176 @media (min-width: 1200px) {
177     /* Widen the fixed sidebar again */
178     .bs-docs-sidebar.affix-bottom,
179     .bs-docs-sidebar.affix {
180         width: 263px;
181     }
182 }
183 </style>
184 <script type="text/javascript">
185 $(function() {
186     'use strict';
187
188     $('.bs-docs-sidebar li').first().addClass('active');
189
190     $(document.body).scrollspy({target: '.bs-docs-sidebar'});
191
192     $('.bs-docs-sidebar').affix();
193 });
194 </script>
195 </head>
196 <body>
197 <div id="content" class="container">
198 <div class="row"><div class="col-md-9"><h1 class="title">Sixth - system for data storage, computation, exploration and interaction</h1>
199 <hr >
200 <ul class="org-ul">
201 <li>This is a subproject of <a href="http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html">Sixth</a>
202 </li>
203
204 <li><a href="http://www2.svjatoslav.eu/gitweb/?p=sixth-data.git;a=snapshot;h=HEAD;sf=tgz">download latest snapshot</a>
205 </li>
206
207 <li>This program is free software; you can redistribute it and/or modify
208 it under the terms of version 3 of the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public
209 License</a> or later as published by the Free Software Foundation.
210 </li>
211
212 <li>Program author:
213 <ul class="org-ul">
214 <li>Svjatoslav Agejenko
215 </li>
216 <li>Homepage: <a href="http://svjatoslav.eu">http://svjatoslav.eu</a>
217 </li>
218 <li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a>
219 </li>
220 </ul>
221 </li>
222
223 <li><a href="http://www.svjatoslav.eu/programs.jsp">other applications hosted at svjatoslav.eu</a>
224 </li>
225 </ul>
226
227
228 <div id="outline-container-sec-1" class="outline-2">
229 <h2 id="sec-1"><a id="ID-f6764282-a6f6-44e6-8716-b428074dd093" name="ID-f6764282-a6f6-44e6-8716-b428074dd093"></a><span class="section-number-2">1</span> Vision / goal</h2>
230 <div class="outline-text-2" id="text-1">
231 <p>
232 Provide versioned, clustered, flexible, distributed, multi-dimensional
233 data storage engine for the <a href="http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html">Sixth computation engine</a>.
234 </p>
235
236 <ul class="org-ul">
237 <li>Speaking of traditional relational database and object oriented
238 business applications:
239 <ul class="org-ul">
240 <li>I hate object-relational impedance mismatch.
241 </li>
242
243 <li>I don't like to convert data between persistent database and
244 </li>
245 </ul>
246 <p>
247 runtime objects for every transaction. How about creating united
248 database/computation engine instead to:
249 </p>
250 <ul class="org-ul">
251 <li>Eliminate constant moving and converting of data between 2 systems.
252 </li>
253 <li>Abstract away difference between RAM VS persistent storage. Let
254 </li>
255 </ul>
256 <p>
257 the system decide at runtime which data to keep in what kind of
258 memory.
259 </p>
260 </li>
261 </ul>
262 </div>
263 </div>
264
265 <div id="outline-container-sec-2" class="outline-2">
266 <h2 id="sec-2"><span class="section-number-2">2</span> Inspiration</h2>
267 <div class="outline-text-2" id="text-2">
268 <ul class="org-ul">
269 <li>Relational databases:
270 <ul class="org-ul">
271 <li>Transactional.
272 </li>
273 <li>Indexable / Quickly searchable.
274 </li>
275 </ul>
276 </li>
277
278 <li>Git (version control system)
279 <ul class="org-ul">
280 <li>Versionable
281 </li>
282 <li>Branchable / mergeable.
283 </li>
284 <li>Transparent cansistency, checksumming and deduplication.
285 </li>
286 <li>(Git as a database:
287 </li>
288 </ul>
289 <p>
290 <a href="https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/">https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/</a> )
291 </p>
292 </li>
293 </ul>
294 </div>
295
296 <div id="outline-container-sec-2-1" class="outline-3">
297 <h3 id="sec-2-1"><a id="ID-d2375acc-af14-4f18-8ad0-7949501178c5" name="ID-d2375acc-af14-4f18-8ad0-7949501178c5"></a><span class="section-number-3">2.1</span> Brain</h3>
298 <div class="outline-text-3" id="text-2-1">
299 <ul class="org-ul">
300 <li>Appears to have more than 3D dimensional design. Food for
301 thought&#x2026;)
302 <ul class="org-ul">
303 <li><a href="https://singularityhub.com/2017/06/21/is-there-a-multidimensional-mathematical-world-hidden-in-the-brains-computation/">https://singularityhub.com/2017/06/21/is-there-a-multidimensional-mathematical-world-hidden-in-the-brains-computation/</a>
304 </li>
305 </ul>
306 </li>
307
308 <li>It directly inspires following ideas
309 <ul class="org-ul">
310 <li><a href="#sec-3-1">Distributed comutation and data storage</a>
311 </li>
312 <li><a href="#sec-3-2">Mapping of hyperspace to traditional object-oriented model</a>
313 </li>
314 <li><a href="#sec-3-3">Handling of relations</a>
315 </li>
316 </ul>
317 </li>
318 </ul>
319 </div>
320 </div>
321 </div>
322
323 <div id="outline-container-sec-3" class="outline-2">
324 <h2 id="sec-3"><span class="section-number-2">3</span> Ideas</h2>
325 <div class="outline-text-2" id="text-3">
326 </div><div id="outline-container-sec-3-1" class="outline-3">
327 <h3 id="sec-3-1"><a id="ID-5d287158-53ea-44a2-a754-dd862366066a" name="ID-5d287158-53ea-44a2-a754-dd862366066a"></a><span class="section-number-3">3.1</span> Distributed computation and data storage</h3>
328 <div class="outline-text-3" id="text-3-1">
329 <p>
330 Maybe every problem can be translated to geometry (use any shapes and
331 as many dimensions as you need). Solution(s) to such problems would
332 then appear as relatively simple search/comparison/lookup results. As
333 a bonus, such geometrical *data storage* AND *computation* can be
334 naturally made in *parallel* and *distributed*. That's what neurons in
335 the brain appear to be doing ! :) . Learning means building/updating
336 the model (the hard part). Question answering is making (relatively
337 simple) lookups (geometrical queries) against the model.
338 </p>
339 </div>
340 </div>
341 <div id="outline-container-sec-3-2" class="outline-3">
342 <h3 id="sec-3-2"><a id="ID-a117c11e-97c1-4822-88b2-9fc10f96caec" name="ID-a117c11e-97c1-4822-88b2-9fc10f96caec"></a><span class="section-number-3">3.2</span> Mapping of hyperspace to traditional object-oriented model</h3>
343 <div class="outline-text-3" id="text-3-2">
344 <p>
345 Object oriented programming is inspired by the way human mind
346 operates. It allows programmer to express ideas to computer in a more
347 human-like terms.
348 </p>
349
350 <p>
351 It is possible to map object model to geometrical hyperspace:
352 </p>
353
354 <ul class="org-ul">
355 <li>Object is a point in space (universe). Each object member variable
356 translates to its own dimension. That is: if class declares 4
357 variables for an object, then corresponding object can be stored as
358 a single point inside 4 dimensional space. Variable values translate
359 to point coordinates in space. That is: Integer, floating point
360 number and even boolean and string can be translated to linear value
361 that can be used as a coordinate along particular dimension.
362 </li>
363
364 <li>Each class declares its own space (universe). All class instances
365 (objects) are points inside that particular universe. References
366 between objects of different types are hyperlinks (portals) between
367 different universes.
368 </li>
369 </ul>
370 </div>
371 </div>
372 <div id="outline-container-sec-3-3" class="outline-3">
373 <h3 id="sec-3-3"><a id="ID-b6b15bd2-c78b-4c51-a343-72843a515c29" name="ID-b6b15bd2-c78b-4c51-a343-72843a515c29"></a><span class="section-number-3">3.3</span> Handling of relations</h3>
374 <div class="outline-text-3" id="text-3-3">
375 <p>
376 Consider we want to create database of books and authors. Book can
377 have multiple authors, and single person can be author for multiple
378 books. It is possible to store how many hours of work each author has
379 contributed to every book, using hyperspace as follows:
380 </p>
381
382 <ul class="org-ul">
383 <li>Every dimension corresponds to one particular book author. (10
384 authors in the database, would require 10 dimensional space)
385 <ul class="org-ul">
386 <li>Point in space corresponds to one particular book.
387 <ul class="org-ul">
388 <li>Point location along particular (author) dimension corresponds
389 to amount of work contributed by particular author for given
390 book.
391 </li>
392 </ul>
393 </li>
394 </ul>
395 </li>
396 </ul>
397
398 <p>
399 Alternatively:
400 </p>
401
402 <ul class="org-ul">
403 <li>Every dimension corresponds to one particular book.
404 <ul class="org-ul">
405 <li>Point in space corresponds to one particular author in the entire
406 database.
407 <ul class="org-ul">
408 <li>Point location along particular (book) dimension corresponds to
409 amount of work contributed for book by given author (point).
410 </li>
411 </ul>
412 </li>
413 </ul>
414 </li>
415 </ul>
416 </div>
417 </div>
418 </div>
419
420
421 <div id="outline-container-sec-4" class="outline-2">
422 <h2 id="sec-4"><span class="section-number-2">4</span> Current status</h2>
423 <div class="outline-text-2" id="text-4">
424 <ul class="org-ul">
425 <li>More or less defined <a href="#sec-1">Vision / goal</a>.
426 </li>
427
428 <li>Collected some <a href="#sec-2-1">ideas</a>.
429 </li>
430
431 <li>Implemented very simple persistent key-value map.
432 <ul class="org-ul">
433 <li>Long term goal is to use it as a backing storage engine and
434 implement more advanced features on top of this.
435 </li>
436 </ul>
437 </li>
438 </ul>
439 </div>
440 </div>
441
442 <div id="outline-container-sec-5" class="outline-2">
443 <h2 id="sec-5"><span class="section-number-2">5</span> See also</h2>
444 <div class="outline-text-2" id="text-5">
445 <p>
446 Interesting or competing projects with good ideas:
447 </p>
448
449 <ul class="org-ul">
450 <li>GRAKN.AI: database in the form of a knowledge graph that uses
451 machine reasoning to simplify data processing challenges for AI
452 applications.
453 <ul class="org-ul">
454 <li><a href="https://grakn.ai/">https://grakn.ai/</a>
455 </li>
456 </ul>
457 </li>
458
459 <li>Gemstone/S based on Smalltalk.
460 <ul class="org-ul">
461 <li><a href="http://esug.org/data/ESUG2015/3%20wednesday/1100-1130%20SQL%20Queries%20on%20Smalltalk%20Objects/SQL%20Queries%20in%20Smalltalk%20(James%20Foster)">http://esug.org/data/ESUG2015/3%20wednesday/1100-1130%20SQL%20Queries%20on%20Smalltalk%20Objects/SQL%20Queries%20in%20Smalltalk%20(James%20Foster)</a>.pdf
462 </li>
463 </ul>
464 </li>
465
466 <li>Magma distributed database in Smalltalk.
467 <ul class="org-ul">
468 <li><a href="http://wiki.squeak.org/squeak/2665">http://wiki.squeak.org/squeak/2665</a>
469 </li>
470 </ul>
471 </li>
472
473 <li>ZetaVM
474 <ul class="org-ul">
475 <li><a href="https://github.com/zetavm/zetavm">https://github.com/zetavm/zetavm</a>
476 </li>
477 </ul>
478 </li>
479 </ul>
480 </div>
481 </div>
482 </div><div class="col-md-3"><nav id="table-of-contents">
483 <div id="text-table-of-contents" class="bs-docs-sidebar">
484 <ul class="nav">
485 <li><a href="#sec-1">1. Vision / goal</a></li>
486 <li><a href="#sec-2">2. Inspiration</a>
487 <ul class="nav">
488 <li><a href="#sec-2-1">2.1. Brain</a></li>
489 </ul>
490 </li>
491 <li><a href="#sec-3">3. Ideas</a>
492 <ul class="nav">
493 <li><a href="#sec-3-1">3.1. Distributed computation and data storage</a></li>
494 <li><a href="#sec-3-2">3.2. Mapping of hyperspace to traditional object-oriented model</a></li>
495 <li><a href="#sec-3-3">3.3. Handling of relations</a></li>
496 </ul>
497 </li>
498 <li><a href="#sec-4">4. Current status</a></li>
499 <li><a href="#sec-5">5. See also</a></li>
500 </ul>
501 </div>
502 </nav>
503 </div></div></div>
504 <footer id="postamble" class="">
505 <div><p class="author">Author: Svjatoslav Agejenko</p>
506 <p class="date">Created: 2017-07-29 Sat 13:31</p>
507 <p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 25.1.1 (<a href="http://orgmode.org">Org-mode</a> 8.2.10)</p>
508 </div>
509 </footer>
510 </body>
511 </html>