reference to hypercube network
[sixth-data.git] / doc / index.org
1 #+TITLE: Sixth Data - Data storage and computing engine
2
3 * (document settings) :noexport:
4 ** use dark style for TWBS-HTML exporter
5 #+HTML_HEAD: <link href="https://bootswatch.com/3/darkly/bootstrap.min.css" rel="stylesheet">
6 #+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
7 #+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script>
8 #+HTML_HEAD: <style type="text/css">
9 #+HTML_HEAD:   footer {background-color: #111 !important;}
10 #+HTML_HEAD:   pre {background-color: #111; color: #ccc;}
11 #+HTML_HEAD: </style>
12
13 * General
14 - This is a subproject of [[https://www3.svjatoslav.eu/projects/sixth/][Sixth]]
15
16 - This program is free software: you can redistribute it and/or modify
17   it under the terms of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public License]] as
18   published by the Free Software Foundation, either version 3 of the
19   License, or (at your option) any later version.
20
21 - Program author:
22   - Svjatoslav Agejenko
23   - Homepage: https://svjatoslav.eu
24   - Email: mailto://svjatoslav@svjatoslav.eu
25
26 - [[https://www.svjatoslav.eu/projects/][Other software projects hosted at svjatoslav.eu]]
27
28 ** Source code
29 - [[https://www2.svjatoslav.eu/gitweb/?p=sixth-data.git;a=snapshot;h=HEAD;sf=tgz][Download latest snapshot in TAR GZ format]]
30
31 - [[https://www2.svjatoslav.eu/gitweb/?p=sixth-data.git;a=summary][Browse Git repository online]]
32
33 - Clone Git repository using command:
34   : git clone https://www2.svjatoslav.eu/git/sixth-data.git
35
36 - See [[https://www3.svjatoslav.eu/projects/sixth-data/apidocs/][JavaDoc]].
37
38 * Vision / goal
39   :PROPERTIES:
40   :ID:       f6764282-a6f6-44e6-8716-b428074dd093
41   :END:
42 Provide versioned, clustered, flexible, distributed, multi-dimensional
43 data storage engine for the [[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html][Sixth computation engine]].
44
45 + Speaking of traditional relational database and object oriented
46   business applications:
47
48   + I hate object-relational impedance mismatch.
49
50   + I don't like to convert data between persistent database and
51     runtime objects for every transaction. How about creating united
52     database/computation engine instead to:
53
54   + Eliminate constant moving and converting of data between 2 systems
55     and make computing happen close to where the data is stored.
56
57   + Abstract away difference between RAM VS persistent storage. Let
58     the system decide at runtime which data to keep in what kind of
59     memory.
60
61 * Inspiration
62 + Relational databases:
63   + Transactional.
64   + Indexable / Quickly searchable.
65
66 + Git (version control system)
67   + Versionable
68   + Branchable / mergeable.
69   + Transparent cansistency, checksumming and deduplication.
70   + (Git as a database:
71   https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/ )
72
73 ** Brain
74   :PROPERTIES:
75   :ID:       d2375acc-af14-4f18-8ad0-7949501178c5
76   :END:
77 + Brain appears to have more than 3D dimensional design:
78   https://singularityhub.com/2017/06/21/is-there-a-multidimensional-mathematical-world-hidden-in-the-brains-computation/
79
80 + Brain appears to use geometry to map thoughts and even sounds:
81   + https://www.quantamagazine.org/the-brain-maps-out-ideas-and-memories-like-spaces-20190114/
82   + https://www.quantamagazine.org/goals-and-rewards-redraw-the-brains-map-of-the-world-20190328
83
84 + It directly inspires [[id:171fe375-c737-41e6-b429-a414f6abc5d8][Geometrical computation]] idea and nicely fits
85   with [[id:01aa65c1-3d44-44a8-9b90-58454bc6be80][CM-1 Connection Machine]] design.
86
87 ** CM-1 Connection Machine
88 :PROPERTIES:
89 :ID:       01aa65c1-3d44-44a8-9b90-58454bc6be80
90 :END:
91 https://en.wikipedia.org/wiki/Connection_Machine
92
93 + see: [[id:171fe375-c737-41e6-b429-a414f6abc5d8][Geometrical computation]]
94
95 + Computation unit has local CPU and RAM.
96
97 + Data is pre-distributed across computation units.
98
99 + Machine's internal 12-dimensional hypercube network allows to
100   efficiently simulate arbitrary dimensional network topology between
101   computational units. So that when we are solving/simulating for
102   example 5 dimensional problem, we can arrange computational units
103   into virtual 5D network. See:
104   http://www.mission-base.com/tamiko/theory/cm_txts/di-ch2.html
105
106 * Ideas
107 ** Geometrical computation
108 :PROPERTIES:
109 :ID:       171fe375-c737-41e6-b429-a414f6abc5d8
110 :END:
111 + Inspired by [[id:d2375acc-af14-4f18-8ad0-7949501178c5][Brain]].
112 + Wits nicely with [[id:01aa65c1-3d44-44a8-9b90-58454bc6be80][CM-1 Connection Machine]] properties.
113
114 *** Distributed computation and data storage
115    :PROPERTIES:
116    :ID:       5d287158-53ea-44a2-a754-dd862366066a
117    :END:
118 Maybe every problem can be translated to geometry (use any shapes and
119 as many dimensions as you need). Solution(s) to such problems would
120 then appear as relatively simple search/comparison/lookup results. As
121 a bonus, such geometrical *data storage* AND *computation* can be
122 naturally made in *parallel* and *distributed*. That's what neurons in
123 the brain appear to be doing ! :) . Learning means building/updating
124 the model (the hard part). Question answering is making (relatively
125 simple) lookups (geometrical queries) against the model.
126 *** Mapping of hyperspace to traditional object-oriented model
127    :PROPERTIES:
128    :ID:       a117c11e-97c1-4822-88b2-9fc10f96caec
129    :END:
130 Object oriented programming is inspired by the way human mind
131 operates. It allows programmer to express ideas to computer in a more
132 human-like terms.
133
134 It is possible to map object model to geometrical hyperspace:
135
136 + Object is a point in space (universe). Each object member variable
137   translates to its own dimension. That is: if class declares 4
138   variables for an object, then corresponding object can be stored as
139   a single point inside 4 dimensional space. Variable values translate
140   to point coordinates in space. That is: Integer, floating point
141   number and even boolean and string can be translated to linear value
142   that can be used as a coordinate along particular dimension.
143
144 + Each class declares its own space (universe). All class instances
145   (objects) are points inside that particular universe. References
146   between objects of different types are hyperlinks (portals) between
147   different universes.
148 *** Handling of relations
149    :PROPERTIES:
150    :ID:       b6b15bd2-c78b-4c51-a343-72843a515c29
151    :END:
152 Consider we want to create database of books and authors. Book can
153 have multiple authors, and single person can be author for multiple
154 books. It is possible to store how many hours of work each author has
155 contributed to every book, using hyperspace as follows:
156
157 + Every dimension corresponds to one particular book author. (10
158   authors in the database, would require 10 dimensional space)
159   + Point in space corresponds to one particular book.
160     + Point location along particular (author) dimension corresponds
161       to amount of work contributed by particular author for given
162       book.
163
164 Alternatively:
165
166 + Every dimension corresponds to one particular book.
167   + Point in space corresponds to one particular author in the entire
168     database.
169     + Point location along particular (book) dimension corresponds to
170       amount of work contributed for book by given author (point).
171
172 ** Layered architecture
173 + layer 1 :: disk / block storage / partition
174
175 + layer 2 :: key/value storage. Keys are unique and are dictated by
176              storage engine. Value is arbitrary but limited size byte
177              array. This layer is responsible for handling disk
178              defragmentation and consistency in case of crash
179              recovery.
180
181 + layer 3 :: key/value storage. Keys are content hashes. Values are
182              arbitrary but limited size content byte arrays. This
183              layer effectively implements content addressable
184              storage. Content addressible storage enables GIT-like
185              behavior (possibility for competing branches, retaining
186              history, transparent deduplication)
187
188 + layer 4 :: Implements arbitrary dimensional multiverse.
189
190 + layer 5 :: Distributed computation engine.
191 * Current status
192 - More or less defined [[id:f6764282-a6f6-44e6-8716-b428074dd093][Vision / goal]].
193
194 - Collected some [[id:d2375acc-af14-4f18-8ad0-7949501178c5][ideas]].
195
196 - Implemented very simple persistent key-value map.
197   - Long term goal is to use it as a backing storage engine and
198     implement more advanced features on top of this.
199
200 * See also
201 Interesting or competing projects with good ideas:
202
203 + [[id:01aa65c1-3d44-44a8-9b90-58454bc6be80][CM-1 Connection Machine]]
204
205 + GRAKN.AI
206   + database in the form of a knowledge graph that uses machine
207     reasoning to simplify data processing challenges for AI
208     applications. https://grakn.ai/
209
210 + [[http://wiki.squeak.org/squeak/2665][Magma]]
211   + Multi-user object database for Squeak
212
213 + [[http://esug.org/data/ESUG2015/3%20wednesday/1100-1130%20SQL%20Queries%20on%20Smalltalk%20Objects/SQL%20Queries%20in%20Smalltalk%20(James%20Foster).pdf][Gemstone/S]]
214   + Completely distributed smalltalk based computing
215     system.
216
217 + [[http://www.uruk.org/emu/Taos.html][TAOS]]
218   + Completely distributed operating system/virtual machine:
219
220 + [[https://github.com/vygr/ChrysaLisp][ChrysaLisp]]
221   + Assembler/C-Script/Lisp 64 bit, MIMD, multi CPU, multi threaded,
222     multi core, multi user Parallel OS. With GUI, Terminal, OO
223     Assembler, Class libraries, C-Script compiler, Lisp interpreter,
224     Debugger, and more...