This repository was archived by the owner on Jul 7, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO
119 lines (82 loc) · 3.06 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
TODO
====
June 2013
---------
- Improve the copying semantics. See -[TestEditingContext testCopyingBetweenContextsWithManyToMany]
- Get rid of COItem in COObject and store COObject pointers in a weak NSPointerArray?
Barely worthwhile.
- Finish "Store controller" api
- Finish workspace demo
May 2013
--------
x COEditingContext implements COItemGraph. If anyone wants to modify those items
returned by -itemForUUID:, then items need to tell the context when they're modified
Apr 2013
--------
General
-------
x Change all uses of NSSet that don't NEED to be NSSet to NSArray for performance
(mostly)
Store
-----
- FInish docs
x FInish rewrite of attachment GC with no full-store scan.
- Basically there are 3 designs we could do:
1. simple 1 row per commit design. The row has a BLOB containing a binary-encoded
[ uuid-number | item-data | uuid-number | item-data ... ] list.
2. 1-row per item changed per commit. OPtionally keep the delta base and the rev parent
in another table, and join them
3. 1 row per property changed per item changed per commit. OPtionally keep the delta base and the rev parent
in another table, and join them.
Will work well if we only typically change one or two properties per commit.
4. We could have a hybrid system of a "full-saves" table and a "delta-saves" table.
x GC unreachable revisions (aka history compacting)including unreachable non-gc-root persistent "roots"
x Merge all gc code into a single GC pass.
x Write binary serialization format
x Write COItem import/export using binary parser.
more or less done: Per-item code must be pure C.
- Never store UUIDs explictly but use a int <-> UUID table (in every database.)
since they tend to be reused a lot.
- Same with property names
x Even the proot metadata is slow to write to json and back. Store it directly in tables.
X Full-text search
- Other search
x Cache references
Performance problems:
- why does increasing the delta run length make performance worse?
x why does performance get linearly worse with more items even if we only modify one?
- The test reads back all items from each commit, even when only one is modified.
So
COItem
------
- Lazy deserialization. Upon creation from store, ivar is a NSData with the binary serialized form.
X Fix validation perf. (removed validation)
X COItemTree: fix performance problems (removed validation)
Types
-----
x remove bag / unique array types
x figure out where to put type names for primitives (<NSData> is org.etoile.bezier-path)
x Get rid of COType and use an int:
kCOStringType 1
kCOIntType 2
...
kCOSetType 1024
kCOArrayType 2048
(kCOSetType | kCOIntType)
Schema
------
-
COObject / COEditingContext
---------------------------
- Fix bugs and complete.
Undo/redo
---------
- Don't put in CO core.
- Write a undo manager that has 4 stacks per persistent root:
- metadata undo, metadata redo, state undo (current branch, current commit), state redo
Tests
-----
- port all...
- test branch creation, switching
- test committing with "update head" off/on.
- test undo/redo