What we Do and What Problems We Try to Solve
we provide a Platform that developers can use to
build highly customized Content Applications
we provide components, and the tools to assemble them
everything we do is open source
various customers - various use cases
Track game builds
Electronic Flight Bags
Central repository for Models
Food industry PLM
https://github.com/nuxeo
No SQL
Inside nuxeo-dbs storage adapter
{
"ecm:id":"52a7352b-041e-49ed-8676-328ce90cc103",
"ecm:primaryType":"MyFile",
"ecm:majorVersion":NumberLong(2),
"ecm:minorVersion":NumberLong(0),
"dc:title":"My Document",
"dc:contributors":[ "bob", "pete", "mary" ],
"dc:created": ISODate("2014-07-03T12:15:07+0200"),
...
"cust:primaryAddress":{
"street":"1 rue René Clair", "zip":"75018", "city":"Paris", "country":"France"},
"files:files":[
{ "name":"doc.txt", "length":1234, "mime-type":"plain/text",
"data":"0111fefdc8b14738067e54f30e568115"
},
{
"name":"doc.pdf", "length":29344, "mime-type":"application/pdf",
"data":"20f42df3221d61cb3e6ab8916b248216"
}
],
"ecm:acp":[
{
name:"local",
acl:[ { "grant":false, "perm":"Write", "user":"bob"},
{ "grant":true, "perm":"Read", "user":"members" } ]
}]
...
}
ecm:parentId
ecm:ancestorIds
{ ... "ecm:parentId" : "3d7efffe-e36b-44bd-8d2e-d8a70c233e9d",
"ecm:ancestorIds" : [ "00000000-0000-0000-0000-000000000000",
"4f5c0e28-86cf-47b3-8269-2db2d8055848",
"3d7efffe-e36b-44bd-8d2e-d8a70c233e9d" ] ...}
ecm:racl: ["Management", "Supervisors", "bob"]
{... "ecm:acp":[ {
name:"local",
acl:[ { "grant":false, "perm":"Write", "user":"bob"},
{ "grant":true, "perm":"Read", "user":"members" } ]}] ...}
db.default.find({
$and: [
{"dc:title": { $in: ["Workspaces", "Sections"] } },
{"ecm:racl": {"$in": ["bob", "members", "Everyone"]}}
]
}
)
SELECT * FROM Document WHERE dc:title = 'Sections' OR dc:title = 'Workspaces'
Find a way to mitigate consistency issues
Transactions can not span across multiple documents
MongoDB
store structure & streams in a BASE way
elasticsearch
provide powerful and scalable queries
SQL DB
store structures in an ACID way
Storage does not impact application : this can be a deployment choice!
A
tomic
C
onsistent
I
solated
D
urable
B
asic
A
vailability
S
oft state
E
ventually consistent
depends on Availability & Performances requirements
Supercharge your Content Repository
Low level read
(fast re-indexing with elasticsearch)
3,500 documents/s using SQL backend
10, 000 documents/s using MongoDB
Raw Java API performances
Single Server
6 core HT 3.5Ghz
126 GB RAM
std hdd
about 3 times faster
Raw Http API performances
Single Server
6 core HT 3.5Ghz
126 GB RAM
std hdd
Storage is no longer the bottleneck
SQL DB Collapse / MongoDB handles the volume
Massive number
of documents
Automatic versioning
Write intensive
Daily Imports
SQL
with tunning
commodity hardware
SQL
7x faster
Read & Write Operations
are competing
Write Operations
are not blocked
C4.xlarge (nuxeo)
C4.2Xlarge (DB)
SQL
Processing on large Document sets are an issue on SQL
Side effects of impedance miss match
Ex: Process 100,000 documents
9,500 documents/s with MongoDB / mmapv1: x13
11,500 documents/s with MongoDB / wiredTiger: x15
lazy loading
cache trashing
1 Nuxeo node + 1 MongoDB node
1900 docs/s
MongoDB CPU is the bottleneck
(800%)
2 Nuxeo nodes + 1 MongoDB node
1850 docs/s
MongoDB CPU is the bottleneck
(800%)
2 Nuxeo nodes + 2 MongoDB nodes
3400 docs/s when using read preferences
Use massive read operations and queries.
Real life project choosing Nuxeo with MongoDB backend
good use case
for MongoDB
want to use MongoDB
lots of data + lots of updates
Thank You !
https://github.com/nuxeo
http://www.nuxeo.com/careers/