名前から、ツリーに基づいたデータベースについて話すことは明らかです。 すぐに予約します。現時点ではコードは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
?
, , .
, - .
?
, ... ...
- .
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
?
, , .
, - .
?
, ... ...
- .