Skip to content

Commit b0071be

Browse files
committed
Add workflow for generating changelog
1 parent 3edb7b4 commit b0071be

4 files changed

Lines changed: 52 additions & 11 deletions

File tree

.github/workflows/changelog.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: Changelog
2+
on:
3+
release:
4+
types:
5+
- created
6+
jobs:
7+
changelog:
8+
runs-on: ubuntu-20.04
9+
steps:
10+
- name: "✏️ Generate release changelog"
11+
uses: heinrichreimer/github-changelog-generator-action@v2.3
12+
with:
13+
token: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
**/target
22
**/.temp
33
.DS_Store
4+
.env

docs/WIKI.md renamed to WIKI.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,26 @@ To construct a successful query language is not easy. It requires a lot of deep
3939
The parsed tokens will be handled by a query logical planner which transform those tokens to relational algebra and execute based on the instructions.
4040

4141
### Brain storming database design & architecture
42+
43+
After a few days of researching and reading **O'Reilly Graph Database** book (it was a very good book for graph database introduction actually), I decided to stumble into experimenting.
44+
45+
It was quite hard to identify the uniqueness of Solomon DB. The main reason is there are too many databases already. From production-ready databases like **Cassandra, PostgreSQL** or a common graph database like **Neo4j** and **JanusGraph**. Even though my desire for being able to design an outstanding architecture is quite high, I position my current skills not capable of that. Hence, instead of trying to over complicate everything, I think starting small steps and climb up stair by stair might be a better strategy.
46+
47+
I got inspired by the design of SurrealDB which does not build its own underlying layer but trying to maximize the power of multiple databases. And I think it is a good design to try. So the main architecture of SolomonDB will be:
48+
49+
#### Underlying storage
50+
51+
There are two NoSQL databases that fascinate me due to its design and scalability.
52+
53+
- **RocksDB:** The popular key-value database designed and maintained by team at Facebook. It is used widely by several big databases as an underlying storage. The use of RocksDB will be elaborated more in a later chapter.
54+
- **Cassandra:** For anyone who works with big data, is quite familiar with this wide-column database. Cassandra is a big guy in the field with its distributed architecture and several other features for streaming and configuring node instances.
55+
56+
#### Property graph data structure & algorithms
57+
58+
The concepts of property graph data structure is used commonly in production system which is **read contention** and graph driven. A quite well-known examples of property graph are social network.
59+
60+
Solomon DB will use property graph data structure to present the graph data in the system. The main problems of this data structure is applying algorithms designed for single relational graph will be a bit complicated.
61+
62+
#### Modelling graph data
63+
64+
Facebook's TAO graph database has a very well-explained white paper that demonstrates the approach to design Property Graph. Core components of Solomon graph model will be **Node, Relationship, Property and Label**.

db/src/storage/mod.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,25 @@ pub use kvs::*;
55
macro_rules! register_adapter {
66
($name:ident, $($x:ident),*) => {
77
use $crate::model::adapter::DatastoreAdapter;
8+
/// # Datastore Manager
9+
/// A generated enumeration Datastore Manager to dynamically register
10+
/// and return the datastore adapter without being constrained by the
11+
/// type system.
12+
#[allow(dead_code)]
813
pub enum DatastoreManager {
9-
$(
10-
$x,
11-
)*
14+
$($x)*
1215
}
1316

17+
#[allow(dead_code)]
1418
impl DatastoreManager {
15-
pub fn $name(&self) -> $( $x)*
16-
{
17-
match self {
18-
$(
19-
DatastoreManager::$x => $x::default(),
20-
)*
21-
}
22-
}
19+
pub fn $name(&self) -> $($x)*
20+
{
21+
match self {
22+
$(
23+
DatastoreManager::$x => $x::$name(),
24+
)*
25+
}
26+
}
2327
}
2428
};
2529
}

0 commit comments

Comments
 (0)