別の自転車またはTreeDb-NoSQL Databaseの起動

作業タイトルTreeDbを使用して、プロジェクトの開始を紹介します。 私はPRをしていません(まだまだ遠いです...)、自分の考えや推論を個人的なブログに投稿しています。 それに応じて、適切な批判、アイデアの議論、一般的には、ブログの目的はそれだけです;)。 プロジェクトの履歴、計画された内容、出力がどのようなものかを追跡するのは興味深いことです。 または、誰かが参加したいかもしれません。 いつも歓迎します。

名前から、ツリーに基づいたデータベースについて話すことは明らかです。 すぐに予約します。現時点ではコードは1行もありません。 まず、コンセプトを決めます。

よくある質問

用語について少し:

キー -一部の(特定の)データを一意に識別する一意の識別子。
キーには文字\ w [azAZ09_] *が含まれる場合があります*
*-この制限は将来削除されるか、[ay]に拡張される可能性があります。 これに対する要求は、障害を見つけることではありません。
キーは、フルまたはショートにすることができます。

短いキーは、特定のレベル内で一意のノード名です。 より正確に言うと、子ノードの一意の名前は1つだけが1つの親ノードの一部である必要があります(兄弟と姉妹は、1つの大きなファミリで同じ名前を持ちません)。 単純なキーA1、B2、C3の例

完全なキーは、ドットで順番に並べられたすべての親ノードの名前です。
完全なキーA1.B2.C3の例は、ノードC3、その親B2、および偉大な親A1の名前です。

データ -要求時に記憶および発行する必要がある特定のバイトシーケンス。 データは英数字またはバイナリのいずれかです。

ノード(ノード)は、キーによって一意に決定されるデータと子ノードの組み合わせです。 つまり、ノード-名前(キー)、データ、および子ノードへのリンクが含まれます。

子ノードは、親ノードに含まれ、1つの関係を持つノードです。 バター。

子ノードに名前を付けることはできません。つまり、デジタルキーは受信順に自動的に割り当てられます。 例を参照してください...

ルートノードは実際には存在せず、第1レベルのノードがあります。 理論的には、存在するはずです。

交換プロトコルの説明


基本は、memcached交換プロトコルです。 最初は、getとsetの2つのコマンドのみを実装する予定です。

1)ノードA1の書き込み
set A1,<data_len> \r\n
\r\n
>stored error *
*- Ok $

:
set A1,5
12345
>stored

2)
set (<node_name>,<data_len>)+ \r\n
\r\n
>stored
....
\r\n
>stored*
*- ?

:
set A1,5 A2,5 A3,5
12345
>stored
67890
>stored
abcde
>stored


3) A1
g et A1\r\n
>A1 5
>12345\r\n
>ok *
*- ? (optional)

4) A1,A2,A3
g et A1,A2,A3\r\n
>A1 5
>12345\r\n
>A2 5
67890
>A2 5
abcde
>ok *
*- ?

5) A ( ?)
set A.# 5,5,5
12345
>stored
67890
>stored
abcde
>stored
, : #1,#2,#3
, : #4,#5,#6

6) A
get A.#
> A.#1,A.#2,A.#3
>ok

7) A
get A.*
>A.#1 5
>12345\r\n
>A.#2 5
>67890\r\n
>A.#3 5
>abcde
>ok

8) A
*-
set A: B1,5 B2,5 B3,5
12345
>stored
67890
>stored
abcde
>stored

:
set A.B1,5 A.B2,5 A.B3,5

a.*.b.*,
a..b.* a..*.*

, .

FAQ

?
, ... .

?
, ...
- .
,
.

?
, , .
.
.

?
. , .
libevent

, ?
.
. , .

?
. - ,
key-value .
, - .

?
- 32 .

?
32 - ... 16?

?
, . , - !

UPDATE?
set

?
, , .
, - .

?
, ... ...
- .
set A1,<data_len> \r\n
\r\n
>stored error *
*- Ok $

:
set A1,5
12345
>stored

2)
set (<node_name>,<data_len>)+ \r\n
\r\n
>stored
....
\r\n
>stored*
*- ?

:
set A1,5 A2,5 A3,5
12345
>stored
67890
>stored
abcde
>stored


3) A1
g et A1\r\n
>A1 5
>12345\r\n
>ok *
*- ? (optional)

4) A1,A2,A3
g et A1,A2,A3\r\n
>A1 5
>12345\r\n
>A2 5
67890
>A2 5
abcde
>ok *
*- ?

5) A ( ?)
set A.# 5,5,5
12345
>stored
67890
>stored
abcde
>stored
, : #1,#2,#3
, : #4,#5,#6

6) A
get A.#
> A.#1,A.#2,A.#3
>ok

7) A
get A.*
>A.#1 5
>12345\r\n
>A.#2 5
>67890\r\n
>A.#3 5
>abcde
>ok

8) A
*-
set A: B1,5 B2,5 B3,5
12345
>stored
67890
>stored
abcde
>stored

:
set A.B1,5 A.B2,5 A.B3,5

a.*.b.*,
a..b.* a..*.*

, .

FAQ

?
, ... .

?
, ...
- .
,
.

?
, , .
.
.

?
. , .
libevent

, ?
.
. , .

?
. - ,
key-value .
, - .

?
- 32 .

?
32 - ... 16?

?
, . , - !

UPDATE?
set

?
, , .
, - .

?
, ... ...
- .
set A1,<data_len> \r\n
\r\n
>stored error *
*- Ok $

:
set A1,5
12345
>stored

2)
set (<node_name>,<data_len>)+ \r\n
\r\n
>stored
....
\r\n
>stored*
*- ?

:
set A1,5 A2,5 A3,5
12345
>stored
67890
>stored
abcde
>stored


3) A1
g et A1\r\n
>A1 5
>12345\r\n
>ok *
*- ? (optional)

4) A1,A2,A3
g et A1,A2,A3\r\n
>A1 5
>12345\r\n
>A2 5
67890
>A2 5
abcde
>ok *
*- ?

5) A ( ?)
set A.# 5,5,5
12345
>stored
67890
>stored
abcde
>stored
, : #1,#2,#3
, : #4,#5,#6

6) A
get A.#
> A.#1,A.#2,A.#3
>ok

7) A
get A.*
>A.#1 5
>12345\r\n
>A.#2 5
>67890\r\n
>A.#3 5
>abcde
>ok

8) A
*-
set A: B1,5 B2,5 B3,5
12345
>stored
67890
>stored
abcde
>stored

:
set A.B1,5 A.B2,5 A.B3,5

a.*.b.*,
a..b.* a..*.*

, .

FAQ

?
, ... .

?
, ...
- .
,
.

?
, , .
.
.

?
. , .
libevent

, ?
.
. , .

?
. - ,
key-value .
, - .

?
- 32 .

?
32 - ... 16?

?
, . , - !

UPDATE?
set

?
, , .
, - .

?
, ... ...
- .

Source: https://habr.com/ru/post/J80928/


All Articles