Fixed HTML style.
[sixth-data.git] / doc / index.org
1 #+TITLE: Sixth - system for data storage, computation, exploration and interaction
2
3 -----
4 - This is a subproject of [[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html][Sixth]]
5
6 - [[http://www2.svjatoslav.eu/gitweb/?p=sixth-data.git;a=snapshot;h=HEAD;sf=tgz][download latest snapshot]]
7
8 - This program is free software; you can redistribute it and/or modify
9   it under the terms of version 3 of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public
10   License]] or later as published by the Free Software Foundation.
11
12 - Program author:
13   - Svjatoslav Agejenko
14   - Homepage: http://svjatoslav.eu
15   - Email: mailto://svjatoslav@svjatoslav.eu
16
17 - [[http://www.svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
18
19
20 * (document settings)                                              :noexport:
21 ** use dark style for TWBS-HTML exporter
22 #+HTML_HEAD: <link href="https://bootswatch.com/4/darkly/bootstrap.min.css" rel="stylesheet">
23 #+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
24 #+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
25 #+HTML_HEAD: <style type="text/css">
26 #+HTML_HEAD:   footer {background-color: #111 !important;}
27 #+HTML_HEAD:   pre {background-color: #111; color: #ccc;}
28 #+HTML_HEAD: </style>
29
30 * Vision / goal
31   :PROPERTIES:
32   :ID:       f6764282-a6f6-44e6-8716-b428074dd093
33   :END:
34 Provide versioned, clustered, flexible, distributed, multi-dimensional
35 data storage engine for the [[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html][Sixth computation engine]].
36
37 + Speaking of traditional relational database and object oriented
38   business applications:
39
40   + I hate object-relational impedance mismatch.
41
42   + I don't like to convert data between persistent database and
43     runtime objects for every transaction. How about creating united
44     database/computation engine instead to:
45
46   + Eliminate constant moving and converting of data between 2 systems
47     and make computing happen close to where the data is stored.
48
49   + Abstract away difference between RAM VS persistent storage. Let
50     the system decide at runtime which data to keep in what kind of
51     memory.
52
53 * Inspiration
54 + Relational databases:
55   + Transactional.
56   + Indexable / Quickly searchable.
57
58 + Git (version control system)
59   + Versionable
60   + Branchable / mergeable.
61   + Transparent cansistency, checksumming and deduplication.
62   + (Git as a database:
63   https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/ )
64
65 ** Brain
66   :PROPERTIES:
67   :ID:       d2375acc-af14-4f18-8ad0-7949501178c5
68   :END:
69 + Appears to have more than 3D dimensional design. Food for
70   thought...)
71   + https://singularityhub.com/2017/06/21/is-there-a-multidimensional-mathematical-world-hidden-in-the-brains-computation/
72
73 + It directly inspires following ideas
74   + [[id:5d287158-53ea-44a2-a754-dd862366066a][Distributed comutation and data storage]]
75   + [[id:a117c11e-97c1-4822-88b2-9fc10f96caec][Mapping of hyperspace to traditional object-oriented model]]
76   + [[id:b6b15bd2-c78b-4c51-a343-72843a515c29][Handling of relations]]
77
78 * Ideas
79 ** Distributed computation and data storage
80    :PROPERTIES:
81    :ID:       5d287158-53ea-44a2-a754-dd862366066a
82    :END:
83 Maybe every problem can be translated to geometry (use any shapes and
84 as many dimensions as you need). Solution(s) to such problems would
85 then appear as relatively simple search/comparison/lookup results. As
86 a bonus, such geometrical *data storage* AND *computation* can be
87 naturally made in *parallel* and *distributed*. That's what neurons in
88 the brain appear to be doing ! :) . Learning means building/updating
89 the model (the hard part). Question answering is making (relatively
90 simple) lookups (geometrical queries) against the model.
91 ** Mapping of hyperspace to traditional object-oriented model
92    :PROPERTIES:
93    :ID:       a117c11e-97c1-4822-88b2-9fc10f96caec
94    :END:
95 Object oriented programming is inspired by the way human mind
96 operates. It allows programmer to express ideas to computer in a more
97 human-like terms.
98
99 It is possible to map object model to geometrical hyperspace:
100
101 + Object is a point in space (universe). Each object member variable
102   translates to its own dimension. That is: if class declares 4
103   variables for an object, then corresponding object can be stored as
104   a single point inside 4 dimensional space. Variable values translate
105   to point coordinates in space. That is: Integer, floating point
106   number and even boolean and string can be translated to linear value
107   that can be used as a coordinate along particular dimension.
108
109 + Each class declares its own space (universe). All class instances
110   (objects) are points inside that particular universe. References
111   between objects of different types are hyperlinks (portals) between
112   different universes.
113 ** Handling of relations
114    :PROPERTIES:
115    :ID:       b6b15bd2-c78b-4c51-a343-72843a515c29
116    :END:
117 Consider we want to create database of books and authors. Book can
118 have multiple authors, and single person can be author for multiple
119 books. It is possible to store how many hours of work each author has
120 contributed to every book, using hyperspace as follows:
121
122 + Every dimension corresponds to one particular book author. (10
123   authors in the database, would require 10 dimensional space)
124   + Point in space corresponds to one particular book.
125     + Point location along particular (author) dimension corresponds
126       to amount of work contributed by particular author for given
127       book.
128
129 Alternatively:
130
131 + Every dimension corresponds to one particular book.
132   + Point in space corresponds to one particular author in the entire
133     database.
134     + Point location along particular (book) dimension corresponds to
135       amount of work contributed for book by given author (point).
136
137 ** Layered architecture
138 + layer 1 :: disk / block storage / partition
139
140 + layer 2 :: key/value storage. Keys are unique and are dictated by
141              storage engine. Value is arbitrary but limited size byte
142              array. This layer is responsible for handling disk
143              defragmentation and consistency in case of crash
144              recovery.
145
146 + layer 3 :: key/value storage. Keys are content hashes. Values are
147              arbitrary but limited size content byte arrays. This
148              layer effectively implements content addressable
149              storage. Content addressible storage enables GIT-like
150              behavior (possibility for competing branches, retaining
151              history, transparent deduplication)
152
153 + layer 4 :: Implements arbitrary dimensional multiverse.
154
155 + layer 5 :: Distributed computation engine.
156
157 * Current status
158 - More or less defined [[id:f6764282-a6f6-44e6-8716-b428074dd093][Vision / goal]].
159
160 - Collected some [[id:d2375acc-af14-4f18-8ad0-7949501178c5][ideas]].
161
162 - Implemented very simple persistent key-value map.
163   - Long term goal is to use it as a backing storage engine and
164     implement more advanced features on top of this.
165
166 * See also
167 Interesting or competing projects with good ideas:
168
169 + GRAKN.AI: database in the form of a knowledge graph that uses
170   machine reasoning to simplify data processing challenges for AI
171   applications.
172   + https://grakn.ai/
173
174 + Gemstone/S based on Smalltalk.
175   + http://esug.org/data/ESUG2015/3%20wednesday/1100-1130%20SQL%20Queries%20on%20Smalltalk%20Objects/SQL%20Queries%20in%20Smalltalk%20(James%20Foster).pdf
176
177 + Magma distributed database in Smalltalk.
178   + http://wiki.squeak.org/squeak/2665
179
180 + ZetaVM
181   + https://github.com/zetavm/zetavm