A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Thing | Weight | OrientDB | Titan | Neo4j | ArangoDB | GraphX | WDQ | InfoGrid | BlazeGraph | Accumulo | Postgres | Virtuoso | 4store | Apache Jena | Build ElasticGraph | Build SQL + GraphServ | Rate thing from 0 to 10 - 10 is best | |
2 | Totals | 939 | 1189 | 1102 | 668 | 1365 | 452 | 0 | 1597 | 0 | 0 | 159 | 0 | 0 | 900 | 0 | Weight can be whatever you want | ||
4 | Easy to type query language | 2 | 8 | 8 | 8 | 8 | 6 | 10 | 7 | 7 | 8 | ||||||||
5 | Can expose native query language (useful because SPARQL and Cypher and powerful and people might be used to them) | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 6 | 0 | |||||||||
6 | Ability to maintain uptime | 20 | 3 | 9 | 9 | 0 | 9 | 1 | 9 | 0 | 7 | ||||||||
7 | Fully free software (no "Enterprise" version) (stuff we need and stuff we may want to add is free software) | 3 | 0 | 10 | 5 | 10 | 10 | 10 | 7 | 5 | 10 | ||||||||
8 | Implements some standard spec (TinkerPop, something else?) | 2 | 3 | 7 | 7 | 0 | 1 | 0 | 9 | 9 | 7 | ||||||||
9 | Horizontal scalability | 8 | 5 | 7 | 3 | 4 | 10 | 0 | 4 | 4 | 7 | ||||||||
10 | Maturity of distributed version | 7 | 4 | 8 | 1 | 3 | 9 | 0 | 1 | 1 | 5 | ||||||||
11 | Stability of storage layer | 9 | 5 | 9 | 7 | 8 | 9 | 1 | 7 | 7 | 5 | ||||||||
12 | Packaging (deb) and puppetization | 2 | 2 | 5 | 5 | 5 | 10 | 4 | 3 | 5 | 0 | ||||||||
13 | Dealing with queries overusing resources (sandboxing) | 6 | 7 | 7 | 8 | 5 | 5 | 1 | 9 | 2 | |||||||||
14 | Cross-DC / multi-cluster replication | 3 | 0 | 10 | 5 | 0 | 10 | 0 | 0 | 0 | |||||||||
15 | Modularity (plug in other index stores, plugin in data types) | 4 | 7 | 8 | 0 | 7 | |||||||||||||
16 | Well commented source (in case we have to hack on it) | 2 | 1 | 8 | 1 | 9 | 5 | ||||||||||||
17 | Query planner | 8 | 4 | 0 | 7 | 6 | 0 | 0 | 9 | ||||||||||
18 | Simple index lookup (population = 101) | 7 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | |||||||||
19 | Indexed range lookup (populate > 100) | 7 | 10 | 10 | 5 | 3 | 9 | 10 | 10 | 10 | |||||||||
20 | Intersecting index lookup (population > 101, country = Germany) | 5 | 5 | 10 | 7 | 6 | 9 | 10 | 10 | ||||||||||
21 | Geospatial indexes (withing 100 miles of the center of Berlin) | 7 | 8 | 8 | 6 | 8 | 8 | 9 | 0 | 9 | |||||||||
22 | Complex geospatial queries (find all points in polygon) | 2 | 3 | 6 | 7 | 1 | 8 | 0 | 0 | 9 | |||||||||
23 | Full text indexes (stemming, ranking, etc) | 2 | 7 | 7 | 5 | 9 | 0 | 7 | 10 | ||||||||||
24 | Indexes for multiple traversals | 4 | 0 | 10 | |||||||||||||||
25 | Handles ten thousand indexes natively (property values, qualifiers, etc) | 9 | 2 | 0 | 6 | 7 | 9 | 8 | |||||||||||
26 | Traversal order rewriting | 7 | 0 | 0 | 0 | 0 | 10 | ||||||||||||
27 | Top-n queries | 7 | 6 | 5 | 0 | 8 | |||||||||||||
28 | Vertex-centric indexes | 3 | 0 | 8 | 0 | 1 | 0 | 0 | 2 | ||||||||||
29 | Online schema changes | 4 | 0 | 4 | 7 | 8 | 7 | 0 | 10 | 7 | |||||||||
31 | Multi operation ACID | 3 | 8 | 6 | 10 | 8 | 0 | 6 | 0 | ||||||||||
32 | Storage layer designed for graphs | 0 | 8 | 3 | 8 | 5 | 4 | 10 | 10 | 0 | |||||||||
33 | Rough edges | -2 | 3 | 5 | 7 | 10 | 10 | 5 | 7 | ||||||||||
34 | Efficiently supports checking qualifiers and references (index or post filtering) | 4 | 9 | 5 | 1 | 5 | 10 | 10 | 3 | ||||||||||
35 | Easy to support query continuation (better than O(offset) paging) | 3 | 8 | 2 | 3 | 2 | |||||||||||||
36 | Easy to support dump all results | 5 | 9 | 10 | 10 | 10 | 10 | 10 | 7 | 10 | |||||||||
37 | Experimentation consle (repl for the graph) | 10 | 6 | 8 | 8 | 8 | 10 | 7 | 8 | ||||||||||
38 | WMF experience (aka ops/dev comfort level) | 6 | 1 | 5 | 1 | 1 | -2 | 0 | 1 | 5 | |||||||||
39 | Memory efficiency | 0 | 5 | 2 | 2 | ||||||||||||||
40 | Work remaining | -5 | 2 | 0 | 3 | 5 | 20 | 10 | 5 | 1 | |||||||||
41 | Amount of hacking we'll have to do on the graph database layer | -10 | 1 | 6 | 8 | 8 | 1 | 10 | 1 | 8 | |||||||||
42 | Upstream support (bug fixes, patch reviews, etc) | 5 | 10 | 0 | 4 | 5 | 10 | 0 | |||||||||||
43 | Project health (diversity of contributors) | 30 | 4 | 0 | 6 | 5 | 8 | 1 | 6 | 0 | |||||||||
44 | Community Health (mailing list, irc, bugs and stuff) | 10 | 3 | 1 | 8 | 7 | 8 | 0 | 3 | 1 | |||||||||
45 | Apache License | 0 | 10 | 10 | 0 | 10 | 10 | 0 | 7 | 10 | 10 | ||||||||
46 | AGPL | 0 | 0 | 0 | 10 | 0 | 0 | 10 | 7 | 0 | 10 | ||||||||
47 | GPL | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 0 | 10 | |||||||||
48 | Gremlin support | 0 | 5 | 10 | 10 | 1 | 3 | 0 | 5 | 5 | 5 | 0 | 10 | ||||||
49 | SPARQL support | 0 | 2 | 3 | 3 | 0 | 1 | 0 | 10 | ||||||||||
50 | Expressiveness of native query language | 8 | 7 | 7 | 9 | 7 | 2 | 10 | 7 | ||||||||||
51 | Data inference/materialization (automatically, with rules we can define) | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | ||||||
52 | Ability to handle lots of writes | 9 | 10 | 7 | |||||||||||||||
53 | |||||||||||||||||||
54 | openhub links for incorrect bad stats | https://www.openhub.net/p/orientdb | https://www.openhub.net/p/titandb | https://www.openhub.net/p/neo4j-graphdb | https://www.openhub.net/p/ArangoDB | https://www.openhub.net/p/apache-spark | https://www.openhub.net/p/infogrid | https://www.openhub.net/p/bigdata | https://www.openhub.net/p/accumulo | ||||||||||
55 | |||||||||||||||||||
56 | |||||||||||||||||||
57 | |||||||||||||||||||
58 | |||||||||||||||||||
59 | Notes!: | ||||||||||||||||||
60 | 2015-02-06 20:36 UTC | I removed the row about index use and exploded it into lots of rows about _how_ we expect indexes to work. This might be overvaluing indexes. | |||||||||||||||||
61 | |||||||||||||||||||
62 | |||||||||||||||||||
63 | |||||||||||||||||||
64 | |||||||||||||||||||
65 | |||||||||||||||||||
66 | |||||||||||||||||||
67 | |||||||||||||||||||
68 | |||||||||||||||||||
69 | |||||||||||||||||||
70 | |||||||||||||||||||
71 |