@yydb/light-db 0.0.0 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/api/database.d.ts +48 -0
  2. package/dist/api/database.d.ts.map +1 -0
  3. package/dist/api/database.js +120 -0
  4. package/dist/api/database.js.map +1 -0
  5. package/dist/api/index.d.ts +7 -22
  6. package/dist/api/index.d.ts.map +1 -1
  7. package/dist/api/index.js +5 -52
  8. package/dist/api/index.js.map +1 -1
  9. package/dist/api/schema.d.ts +33 -0
  10. package/dist/api/schema.d.ts.map +1 -0
  11. package/dist/api/schema.js +80 -0
  12. package/dist/api/schema.js.map +1 -0
  13. package/dist/api/transaction.d.ts +26 -0
  14. package/dist/api/transaction.d.ts.map +1 -0
  15. package/dist/api/transaction.js +52 -0
  16. package/dist/api/transaction.js.map +1 -0
  17. package/dist/api/types.d.ts +55 -148
  18. package/dist/api/types.d.ts.map +1 -1
  19. package/dist/api/types.js +6 -5
  20. package/dist/api/types.js.map +1 -1
  21. package/dist/codec/binary.d.ts +196 -0
  22. package/dist/codec/binary.d.ts.map +1 -0
  23. package/dist/codec/binary.js +342 -0
  24. package/dist/codec/binary.js.map +1 -0
  25. package/dist/codec/checksum.d.ts +21 -0
  26. package/dist/codec/checksum.d.ts.map +1 -0
  27. package/dist/codec/checksum.js +46 -0
  28. package/dist/codec/checksum.js.map +1 -0
  29. package/dist/codec/index.d.ts +12 -0
  30. package/dist/codec/index.d.ts.map +1 -0
  31. package/dist/codec/index.js +10 -0
  32. package/dist/codec/index.js.map +1 -0
  33. package/dist/codec/page.d.ts +114 -0
  34. package/dist/codec/page.d.ts.map +1 -0
  35. package/dist/codec/page.js +225 -0
  36. package/dist/codec/page.js.map +1 -0
  37. package/dist/codec/record.d.ts +62 -0
  38. package/dist/codec/record.d.ts.map +1 -0
  39. package/dist/codec/record.js +82 -0
  40. package/dist/codec/record.js.map +1 -0
  41. package/dist/core/broadcast.d.ts +39 -0
  42. package/dist/core/broadcast.d.ts.map +1 -0
  43. package/dist/core/broadcast.js +54 -0
  44. package/dist/core/broadcast.js.map +1 -0
  45. package/dist/core/checkpoint.d.ts +23 -0
  46. package/dist/core/checkpoint.d.ts.map +1 -0
  47. package/dist/core/checkpoint.js +49 -0
  48. package/dist/core/checkpoint.js.map +1 -0
  49. package/dist/core/engine.d.ts +142 -0
  50. package/dist/core/engine.d.ts.map +1 -0
  51. package/dist/core/engine.js +304 -0
  52. package/dist/core/engine.js.map +1 -0
  53. package/dist/core/index.d.ts +17 -0
  54. package/dist/core/index.d.ts.map +1 -0
  55. package/dist/core/index.js +13 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/lease.d.ts +32 -0
  58. package/dist/core/lease.d.ts.map +1 -0
  59. package/dist/core/lease.js +81 -0
  60. package/dist/core/lease.js.map +1 -0
  61. package/dist/core/records.d.ts +49 -0
  62. package/dist/core/records.d.ts.map +1 -0
  63. package/dist/core/records.js +70 -0
  64. package/dist/core/records.js.map +1 -0
  65. package/dist/core/recovery.d.ts +43 -0
  66. package/dist/core/recovery.d.ts.map +1 -0
  67. package/dist/core/recovery.js +99 -0
  68. package/dist/core/recovery.js.map +1 -0
  69. package/dist/core/wal.d.ts +50 -0
  70. package/dist/core/wal.d.ts.map +1 -0
  71. package/dist/core/wal.js +114 -0
  72. package/dist/core/wal.js.map +1 -0
  73. package/dist/errors/index.d.ts +44 -66
  74. package/dist/errors/index.d.ts.map +1 -1
  75. package/dist/errors/index.js +43 -128
  76. package/dist/errors/index.js.map +1 -1
  77. package/dist/index.d.ts +14 -215
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +14 -724
  80. package/dist/index.js.map +1 -1
  81. package/dist/storage/StorageAdapter.d.ts +97 -0
  82. package/dist/storage/StorageAdapter.d.ts.map +1 -0
  83. package/dist/storage/StorageAdapter.js +9 -0
  84. package/dist/storage/StorageAdapter.js.map +1 -0
  85. package/dist/storage/index.d.ts +9 -8
  86. package/dist/storage/index.d.ts.map +1 -1
  87. package/dist/storage/index.js +8 -151
  88. package/dist/storage/index.js.map +1 -1
  89. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts +140 -0
  90. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts.map +1 -0
  91. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js +403 -0
  92. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js.map +1 -0
  93. package/dist/storage/memory/MemoryStorageAdapter.d.ts +76 -0
  94. package/dist/storage/memory/MemoryStorageAdapter.d.ts.map +1 -0
  95. package/dist/storage/memory/MemoryStorageAdapter.js +212 -0
  96. package/dist/storage/memory/MemoryStorageAdapter.js.map +1 -0
  97. package/dist/storage/opfs/OpfsStorageAdapter.d.ts +141 -0
  98. package/dist/storage/opfs/OpfsStorageAdapter.d.ts.map +1 -0
  99. package/dist/storage/opfs/OpfsStorageAdapter.js +400 -0
  100. package/dist/storage/opfs/OpfsStorageAdapter.js.map +1 -0
  101. package/package.json +48 -36
  102. package/readme.md +80 -94
  103. package/dist/api/LightDB.d.ts +0 -194
  104. package/dist/api/LightDB.d.ts.map +0 -1
  105. package/dist/api/LightDB.js +0 -299
  106. package/dist/api/LightDB.js.map +0 -1
  107. package/dist/api/Transaction.d.ts +0 -100
  108. package/dist/api/Transaction.d.ts.map +0 -1
  109. package/dist/api/Transaction.js +0 -263
  110. package/dist/api/Transaction.js.map +0 -1
  111. package/dist/collection/Collection.d.ts +0 -235
  112. package/dist/collection/Collection.d.ts.map +0 -1
  113. package/dist/collection/Collection.js +0 -671
  114. package/dist/collection/Collection.js.map +0 -1
  115. package/dist/collection/QueryBuilder.d.ts +0 -225
  116. package/dist/collection/QueryBuilder.d.ts.map +0 -1
  117. package/dist/collection/QueryBuilder.js +0 -475
  118. package/dist/collection/QueryBuilder.js.map +0 -1
  119. package/dist/collection/QueryParser.d.ts +0 -117
  120. package/dist/collection/QueryParser.d.ts.map +0 -1
  121. package/dist/collection/QueryParser.js +0 -438
  122. package/dist/collection/QueryParser.js.map +0 -1
  123. package/dist/collection/index.d.ts +0 -42
  124. package/dist/collection/index.d.ts.map +0 -1
  125. package/dist/collection/index.js +0 -41
  126. package/dist/collection/index.js.map +0 -1
  127. package/dist/collection/types.d.ts +0 -365
  128. package/dist/collection/types.d.ts.map +0 -1
  129. package/dist/collection/types.js +0 -7
  130. package/dist/collection/types.js.map +0 -1
  131. package/dist/constants/index.d.ts +0 -51
  132. package/dist/constants/index.d.ts.map +0 -1
  133. package/dist/constants/index.js +0 -68
  134. package/dist/constants/index.js.map +0 -1
  135. package/dist/indexes/BPlusTree.d.ts +0 -181
  136. package/dist/indexes/BPlusTree.d.ts.map +0 -1
  137. package/dist/indexes/BPlusTree.js +0 -528
  138. package/dist/indexes/BPlusTree.js.map +0 -1
  139. package/dist/indexes/IndexManager.d.ts +0 -236
  140. package/dist/indexes/IndexManager.d.ts.map +0 -1
  141. package/dist/indexes/IndexManager.js +0 -502
  142. package/dist/indexes/IndexManager.js.map +0 -1
  143. package/dist/indexes/PrimaryIndex.d.ts +0 -240
  144. package/dist/indexes/PrimaryIndex.d.ts.map +0 -1
  145. package/dist/indexes/PrimaryIndex.js +0 -354
  146. package/dist/indexes/PrimaryIndex.js.map +0 -1
  147. package/dist/indexes/SecondaryIndex.d.ts +0 -204
  148. package/dist/indexes/SecondaryIndex.d.ts.map +0 -1
  149. package/dist/indexes/SecondaryIndex.js +0 -480
  150. package/dist/indexes/SecondaryIndex.js.map +0 -1
  151. package/dist/indexes/errors.d.ts +0 -66
  152. package/dist/indexes/errors.d.ts.map +0 -1
  153. package/dist/indexes/errors.js +0 -117
  154. package/dist/indexes/errors.js.map +0 -1
  155. package/dist/indexes/index.d.ts +0 -52
  156. package/dist/indexes/index.d.ts.map +0 -1
  157. package/dist/indexes/index.js +0 -131
  158. package/dist/indexes/index.js.map +0 -1
  159. package/dist/indexes/types.d.ts +0 -246
  160. package/dist/indexes/types.d.ts.map +0 -1
  161. package/dist/indexes/types.js +0 -30
  162. package/dist/indexes/types.js.map +0 -1
  163. package/dist/performance/BatchWALWriter.d.ts +0 -185
  164. package/dist/performance/BatchWALWriter.d.ts.map +0 -1
  165. package/dist/performance/BatchWALWriter.js +0 -490
  166. package/dist/performance/BatchWALWriter.js.map +0 -1
  167. package/dist/performance/ColumnarStorage.d.ts +0 -138
  168. package/dist/performance/ColumnarStorage.d.ts.map +0 -1
  169. package/dist/performance/ColumnarStorage.js +0 -875
  170. package/dist/performance/ColumnarStorage.js.map +0 -1
  171. package/dist/performance/LazyQuery.d.ts +0 -307
  172. package/dist/performance/LazyQuery.d.ts.map +0 -1
  173. package/dist/performance/LazyQuery.js +0 -588
  174. package/dist/performance/LazyQuery.js.map +0 -1
  175. package/dist/performance/OptimizedBuffer.d.ts +0 -375
  176. package/dist/performance/OptimizedBuffer.d.ts.map +0 -1
  177. package/dist/performance/OptimizedBuffer.js +0 -730
  178. package/dist/performance/OptimizedBuffer.js.map +0 -1
  179. package/dist/performance/RWLock.d.ts +0 -260
  180. package/dist/performance/RWLock.d.ts.map +0 -1
  181. package/dist/performance/RWLock.js +0 -570
  182. package/dist/performance/RWLock.js.map +0 -1
  183. package/dist/performance/index.d.ts +0 -41
  184. package/dist/performance/index.d.ts.map +0 -1
  185. package/dist/performance/index.js +0 -162
  186. package/dist/performance/index.js.map +0 -1
  187. package/dist/performance/types.d.ts +0 -247
  188. package/dist/performance/types.d.ts.map +0 -1
  189. package/dist/performance/types.js +0 -26
  190. package/dist/performance/types.js.map +0 -1
  191. package/dist/storage/Checkpoint.d.ts +0 -128
  192. package/dist/storage/Checkpoint.d.ts.map +0 -1
  193. package/dist/storage/Checkpoint.js +0 -251
  194. package/dist/storage/Checkpoint.js.map +0 -1
  195. package/dist/storage/LightFile.d.ts +0 -227
  196. package/dist/storage/LightFile.d.ts.map +0 -1
  197. package/dist/storage/LightFile.js +0 -526
  198. package/dist/storage/LightFile.js.map +0 -1
  199. package/dist/storage/Recovery.d.ts +0 -172
  200. package/dist/storage/Recovery.d.ts.map +0 -1
  201. package/dist/storage/Recovery.js +0 -399
  202. package/dist/storage/Recovery.js.map +0 -1
  203. package/dist/storage/SHMFile.d.ts +0 -243
  204. package/dist/storage/SHMFile.d.ts.map +0 -1
  205. package/dist/storage/SHMFile.js +0 -436
  206. package/dist/storage/SHMFile.js.map +0 -1
  207. package/dist/storage/StorageEngine.d.ts +0 -146
  208. package/dist/storage/StorageEngine.d.ts.map +0 -1
  209. package/dist/storage/StorageEngine.js +0 -353
  210. package/dist/storage/StorageEngine.js.map +0 -1
  211. package/dist/storage/WALFile.d.ts +0 -248
  212. package/dist/storage/WALFile.d.ts.map +0 -1
  213. package/dist/storage/WALFile.js +0 -597
  214. package/dist/storage/WALFile.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -220
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -7
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/utils/binary.d.ts +0 -271
  220. package/dist/utils/binary.d.ts.map +0 -1
  221. package/dist/utils/binary.js +0 -454
  222. package/dist/utils/binary.js.map +0 -1
  223. package/dist/utils/file.d.ts +0 -166
  224. package/dist/utils/file.d.ts.map +0 -1
  225. package/dist/utils/file.js +0 -346
  226. package/dist/utils/file.js.map +0 -1
  227. package/dist/utils/index.d.ts +0 -6
  228. package/dist/utils/index.d.ts.map +0 -1
  229. package/dist/utils/index.js +0 -39
  230. package/dist/utils/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"BPlusTree.d.ts","sourceRoot":"","sources":["../../src/indexes/BPlusTree.ts"],"names":[],"mappings":"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"}
@@ -1,528 +0,0 @@
1
- "use strict";
2
- /**
3
- * LightDB B+ 树实现
4
- * 用于主键索引,支持 O(log n) 的插入、查找、删除和范围查询
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.BPlusTree = void 0;
8
- const errors_1 = require("./errors");
9
- /**
10
- * 默认 B+ 树阶数(每个节点最多存储的键数量)
11
- */
12
- const DEFAULT_ORDER = 64;
13
- /**
14
- * B+ 树叶子节点
15
- */
16
- class BPlusTreeLeafNode {
17
- constructor() {
18
- this.keys = [];
19
- this.values = [];
20
- this.next = null;
21
- this.prev = null;
22
- }
23
- isLeaf() {
24
- return true;
25
- }
26
- }
27
- /**
28
- * B+ 树内部节点
29
- */
30
- class BPlusTreeInternalNode {
31
- constructor() {
32
- this.keys = [];
33
- this.children = [];
34
- }
35
- isLeaf() {
36
- return false;
37
- }
38
- }
39
- /**
40
- * 默认比较器
41
- * 支持字符串和数值类型的比较
42
- */
43
- function defaultComparator(a, b) {
44
- if (typeof a === "number" && typeof b === "number") {
45
- return a - b;
46
- }
47
- const strA = String(a);
48
- const strB = String(b);
49
- if (strA < strB) return -1;
50
- if (strA > strB) return 1;
51
- return 0;
52
- }
53
- /**
54
- * B+ 树实现
55
- * 提供高效的键值存储和范围查询能力
56
- */
57
- class BPlusTree {
58
- /**
59
- * 创建 B+ 树实例
60
- * @param order B+ 树阶数,默认 64
61
- * @param comparator 键比较器
62
- */
63
- constructor(order = DEFAULT_ORDER, comparator) {
64
- this.size = 0;
65
- this.firstLeaf = null;
66
- this.lastLeaf = null;
67
- if (order < 3) {
68
- throw new errors_1.IndexOperationError("B+ tree order must be at least 3", "constructor");
69
- }
70
- this.order = order;
71
- this.comparator = comparator ?? defaultComparator;
72
- this.root = new BPlusTreeLeafNode();
73
- this.firstLeaf = this.root;
74
- this.lastLeaf = this.root;
75
- }
76
- /**
77
- * 获取树中键值对数量
78
- */
79
- get Size() {
80
- return this.size;
81
- }
82
- /**
83
- * 检查树是否为空
84
- */
85
- isEmpty() {
86
- return this.size === 0;
87
- }
88
- /**
89
- * 插入键值对
90
- * @param key 键
91
- * @param value 值
92
- * @returns 如果键已存在,返回旧值;否则返回 undefined
93
- */
94
- insert(key, value) {
95
- const existingValue = this.find(key);
96
- if (existingValue !== undefined) {
97
- this.updateValue(key, value);
98
- return existingValue;
99
- }
100
- const leaf = this.findLeafNode(key);
101
- this.insertIntoLeaf(leaf, key, value);
102
- this.size++;
103
- if (leaf.keys.length > this.order) {
104
- this.splitLeaf(leaf);
105
- }
106
- return undefined;
107
- }
108
- /**
109
- * 查找键对应的值
110
- * @param key 键
111
- * @returns 值,如果不存在返回 undefined
112
- */
113
- find(key) {
114
- const leaf = this.findLeafNode(key);
115
- const index = this.binarySearch(leaf.keys, key);
116
- if (index >= 0 && index < leaf.keys.length) {
117
- const cmp = this.comparator(leaf.keys[index], key);
118
- if (cmp === 0) {
119
- return leaf.values[index];
120
- }
121
- }
122
- for (let i = 0; i < leaf.keys.length; i++) {
123
- if (this.comparator(leaf.keys[i], key) === 0) {
124
- return leaf.values[i];
125
- }
126
- }
127
- return undefined;
128
- }
129
- /**
130
- * 检查键是否存在
131
- * @param key 键
132
- */
133
- has(key) {
134
- return this.find(key) !== undefined;
135
- }
136
- /**
137
- * 删除键值对
138
- * @param key 键
139
- * @returns 被删除的值,如果不存在返回 undefined
140
- */
141
- delete(key) {
142
- const leaf = this.findLeafNode(key);
143
- const index = this.findKeyIndex(leaf.keys, key);
144
- if (index === -1) {
145
- return undefined;
146
- }
147
- const value = leaf.values[index];
148
- leaf.keys.splice(index, 1);
149
- leaf.values.splice(index, 1);
150
- this.size--;
151
- if (leaf.keys.length === 0 && leaf !== this.root) {
152
- this.removeLeafNode(leaf);
153
- }
154
- return value;
155
- }
156
- /**
157
- * 更新键对应的值
158
- * @param key 键
159
- * @param value 新值
160
- * @returns 是否更新成功
161
- */
162
- update(key, value) {
163
- const leaf = this.findLeafNode(key);
164
- const index = this.findKeyIndex(leaf.keys, key);
165
- if (index === -1) {
166
- return false;
167
- }
168
- leaf.values[index] = value;
169
- return true;
170
- }
171
- /**
172
- * 范围查询
173
- * @param start 起始键(包含)
174
- * @param end 结束键(包含)
175
- * @param includeStart 是否包含起始键
176
- * @param includeEnd 是否包含结束键
177
- * @returns 键值对数组
178
- */
179
- range(start, end, includeStart = true, includeEnd = true) {
180
- const result = [];
181
- if (this.size === 0) {
182
- return result;
183
- }
184
- let startLeaf;
185
- let startIndex;
186
- if (start !== undefined) {
187
- startLeaf = this.findLeafNode(start);
188
- startIndex = this.findFirstGreaterOrEqual(startLeaf.keys, start);
189
- } else {
190
- startLeaf = this.firstLeaf;
191
- startIndex = 0;
192
- }
193
- let currentLeaf = startLeaf;
194
- let currentIndex = startIndex;
195
- while (currentLeaf !== null) {
196
- for (let i = currentIndex; i < currentLeaf.keys.length; i++) {
197
- const key = currentLeaf.keys[i];
198
- if (start !== undefined) {
199
- const cmp = this.comparator(key, start);
200
- if (cmp < 0 || (cmp === 0 && !includeStart)) {
201
- continue;
202
- }
203
- }
204
- if (end !== undefined) {
205
- const cmp = this.comparator(key, end);
206
- if (cmp > 0 || (cmp === 0 && !includeEnd)) {
207
- return result;
208
- }
209
- }
210
- result.push({ key, value: currentLeaf.values[i] });
211
- }
212
- currentLeaf = currentLeaf.next;
213
- currentIndex = 0;
214
- }
215
- return result;
216
- }
217
- /**
218
- * 获取所有键(有序)
219
- */
220
- keys() {
221
- const result = [];
222
- let current = this.firstLeaf;
223
- while (current !== null) {
224
- result.push(...current.keys);
225
- current = current.next;
226
- }
227
- return result;
228
- }
229
- /**
230
- * 获取所有值(按键顺序)
231
- */
232
- values() {
233
- const result = [];
234
- let current = this.firstLeaf;
235
- while (current !== null) {
236
- result.push(...current.values);
237
- current = current.next;
238
- }
239
- return result;
240
- }
241
- /**
242
- * 获取所有键值对(有序)
243
- */
244
- entries() {
245
- const result = [];
246
- let current = this.firstLeaf;
247
- while (current !== null) {
248
- for (let i = 0; i < current.keys.length; i++) {
249
- result.push({ key: current.keys[i], value: current.values[i] });
250
- }
251
- current = current.next;
252
- }
253
- return result;
254
- }
255
- /**
256
- * 清空树
257
- */
258
- clear() {
259
- this.root = new BPlusTreeLeafNode();
260
- this.firstLeaf = this.root;
261
- this.lastLeaf = this.root;
262
- this.size = 0;
263
- }
264
- /**
265
- * 获取最小键
266
- */
267
- minKey() {
268
- if (this.size === 0) {
269
- return undefined;
270
- }
271
- return this.firstLeaf.keys[0];
272
- }
273
- /**
274
- * 获取最大键
275
- */
276
- maxKey() {
277
- if (this.size === 0) {
278
- return undefined;
279
- }
280
- return this.lastLeaf.keys[this.lastLeaf.keys.length - 1];
281
- }
282
- /**
283
- * 获取第一个键值对
284
- */
285
- first() {
286
- if (this.size === 0) {
287
- return undefined;
288
- }
289
- return {
290
- key: this.firstLeaf.keys[0],
291
- value: this.firstLeaf.values[0],
292
- };
293
- }
294
- /**
295
- * 获取最后一个键值对
296
- */
297
- last() {
298
- if (this.size === 0) {
299
- return undefined;
300
- }
301
- const lastIndex = this.lastLeaf.keys.length - 1;
302
- return {
303
- key: this.lastLeaf.keys[lastIndex],
304
- value: this.lastLeaf.values[lastIndex],
305
- };
306
- }
307
- /**
308
- * 遍历树
309
- * @param callback 回调函数
310
- */
311
- forEach(callback) {
312
- let current = this.firstLeaf;
313
- while (current !== null) {
314
- for (let i = 0; i < current.keys.length; i++) {
315
- callback(current.keys[i], current.values[i]);
316
- }
317
- current = current.next;
318
- }
319
- }
320
- /**
321
- * 创建迭代器
322
- */
323
- *[Symbol.iterator]() {
324
- let current = this.firstLeaf;
325
- while (current !== null) {
326
- for (let i = 0; i < current.keys.length; i++) {
327
- yield { key: current.keys[i], value: current.values[i] };
328
- }
329
- current = current.next;
330
- }
331
- }
332
- /**
333
- * 查找键所在的叶子节点
334
- */
335
- findLeafNode(key) {
336
- let node = this.root;
337
- while (!node.isLeaf()) {
338
- const internalNode = node;
339
- let i = 0;
340
- while (i < internalNode.keys.length && this.comparator(key, internalNode.keys[i]) >= 0) {
341
- i++;
342
- }
343
- node = internalNode.children[i];
344
- }
345
- return node;
346
- }
347
- /**
348
- * 在叶子节点中插入键值对
349
- */
350
- insertIntoLeaf(leaf, key, value) {
351
- let i = 0;
352
- while (i < leaf.keys.length && this.comparator(key, leaf.keys[i]) > 0) {
353
- i++;
354
- }
355
- leaf.keys.splice(i, 0, key);
356
- leaf.values.splice(i, 0, value);
357
- }
358
- /**
359
- * 分裂叶子节点
360
- */
361
- splitLeaf(leaf) {
362
- const mid = Math.floor(leaf.keys.length / 2);
363
- const newLeaf = new BPlusTreeLeafNode();
364
- newLeaf.keys = leaf.keys.splice(mid);
365
- newLeaf.values = leaf.values.splice(mid);
366
- newLeaf.next = leaf.next;
367
- newLeaf.prev = leaf;
368
- if (leaf.next) {
369
- leaf.next.prev = newLeaf;
370
- }
371
- leaf.next = newLeaf;
372
- if (leaf === this.lastLeaf) {
373
- this.lastLeaf = newLeaf;
374
- }
375
- const parent = this.findOrCreateParent(leaf);
376
- const insertIndex = parent.children.indexOf(leaf) + 1;
377
- const promoteKey = newLeaf.keys[0];
378
- parent.keys.splice(insertIndex - 1, 0, promoteKey);
379
- parent.children.splice(insertIndex, 0, newLeaf);
380
- if (parent.keys.length >= this.order) {
381
- this.splitInternal(parent);
382
- }
383
- }
384
- /**
385
- * 分裂内部节点
386
- */
387
- splitInternal(node) {
388
- const mid = Math.floor(node.keys.length / 2);
389
- const newNode = new BPlusTreeInternalNode();
390
- const promoteKey = node.keys[mid];
391
- newNode.keys = node.keys.splice(mid + 1);
392
- node.keys.pop();
393
- newNode.children = node.children.splice(mid + 1);
394
- if (node === this.root) {
395
- const newRoot = new BPlusTreeInternalNode();
396
- newRoot.keys.push(promoteKey);
397
- newRoot.children.push(node, newNode);
398
- this.root = newRoot;
399
- } else {
400
- const parent = this.findOrCreateParent(node);
401
- const insertIndex = parent.children.indexOf(node) + 1;
402
- parent.keys.splice(insertIndex - 1, 0, promoteKey);
403
- parent.children.splice(insertIndex, 0, newNode);
404
- if (parent.keys.length >= this.order) {
405
- this.splitInternal(parent);
406
- }
407
- }
408
- }
409
- /**
410
- * 查找或创建父节点
411
- */
412
- findOrCreateParent(node) {
413
- if (node === this.root) {
414
- const newRoot = new BPlusTreeInternalNode();
415
- newRoot.children.push(this.root);
416
- this.root = newRoot;
417
- return newRoot;
418
- }
419
- return this.findParent(this.root, node);
420
- }
421
- /**
422
- * 查找父节点
423
- */
424
- findParent(current, target) {
425
- if (current.isLeaf()) {
426
- return null;
427
- }
428
- const internalNode = current;
429
- for (const child of internalNode.children) {
430
- if (child === target) {
431
- return internalNode;
432
- }
433
- if (!child.isLeaf()) {
434
- const found = this.findParent(child, target);
435
- if (found) {
436
- return found;
437
- }
438
- }
439
- }
440
- return null;
441
- }
442
- /**
443
- * 移除空叶子节点
444
- */
445
- removeLeafNode(leaf) {
446
- if (leaf.prev) {
447
- leaf.prev.next = leaf.next;
448
- } else {
449
- this.firstLeaf = leaf.next;
450
- }
451
- if (leaf.next) {
452
- leaf.next.prev = leaf.prev;
453
- } else {
454
- this.lastLeaf = leaf.prev;
455
- }
456
- if (leaf === this.root) {
457
- this.root = new BPlusTreeLeafNode();
458
- this.firstLeaf = this.root;
459
- this.lastLeaf = this.root;
460
- return;
461
- }
462
- const parent = this.findParent(this.root, leaf);
463
- if (parent) {
464
- const index = parent.children.indexOf(leaf);
465
- if (index !== -1) {
466
- parent.children.splice(index, 1);
467
- if (index > 0) {
468
- parent.keys.splice(index - 1, 1);
469
- } else if (parent.keys.length > 0) {
470
- parent.keys.splice(0, 1);
471
- }
472
- }
473
- }
474
- }
475
- /**
476
- * 二分查找
477
- */
478
- binarySearch(keys, key) {
479
- let left = 0;
480
- let right = keys.length - 1;
481
- while (left <= right) {
482
- const mid = Math.floor((left + right) / 2);
483
- const cmp = this.comparator(keys[mid], key);
484
- if (cmp === 0) {
485
- return mid;
486
- } else if (cmp < 0) {
487
- left = mid + 1;
488
- } else {
489
- right = mid - 1;
490
- }
491
- }
492
- return left;
493
- }
494
- /**
495
- * 查找键在数组中的索引
496
- */
497
- findKeyIndex(keys, key) {
498
- for (let i = 0; i < keys.length; i++) {
499
- if (this.comparator(keys[i], key) === 0) {
500
- return i;
501
- }
502
- }
503
- return -1;
504
- }
505
- /**
506
- * 查找第一个大于等于目标键的索引
507
- */
508
- findFirstGreaterOrEqual(keys, key) {
509
- for (let i = 0; i < keys.length; i++) {
510
- if (this.comparator(keys[i], key) >= 0) {
511
- return i;
512
- }
513
- }
514
- return keys.length;
515
- }
516
- /**
517
- * 更新已存在键的值
518
- */
519
- updateValue(key, value) {
520
- const leaf = this.findLeafNode(key);
521
- const index = this.findKeyIndex(leaf.keys, key);
522
- if (index !== -1) {
523
- leaf.values[index] = value;
524
- }
525
- }
526
- }
527
- exports.BPlusTree = BPlusTree;
528
- //# sourceMappingURL=BPlusTree.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BPlusTree.js","sourceRoot":"","sources":["../../src/indexes/BPlusTree.ts"],"names":[],"mappings":"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"}