The goals of VCS (Visible Content Store) are to:

  • Store information in standard SQL databases.
  • Use "natural" object mapping to tables.
  • Be fast.
  • Support full-text searches on databases having that capability.
  • Have some flexibility in the storage model to optimize certain cases at configuration time.

This section's sub-pages describe the architecture of VCS.

"Visible SQL" Structures

When using VCS, you can directly access all your data in pure SQL: the schema of the database is a mapping of the XSD schemas you defined in the Nuxeo configuration.

Easy Reporting

Because SQL data can be accessed directly, you may use any SQL reporting tool (Business Object, BIRT, Crystal Reports...) to build custom business reports on your documents data.

Easy Data Injection

For big data migration you can use direct SQL injection. Although we provide import / export APIs in Nuxeo, they will never be as fast as bulk inserts. Furthermore, in some cases, you don't want the people dealing with data migration to be Nuxeo developers: in this case, using plain SQL is an advantage.

Simple Debugging

Because data is transparently stored in SQL tables, it's very easy to have a look at them and understand exactly what is going on.

Easy Schema Migration

With VCS, schema changes in Nuxeo are automatically propagated to the SQL level (columns are added as needed, and you are warned about extra unused columns). If you change a field type, you can just do ALTER TABLE to change the column type.

Easy and Safe Hot Backup

You can hot backup your SQL database and then in a second step hot backup the binary store; in this case data will be consistent:

  • You have no risk of having a file being in the middle of an update.
  • You have no risk of having a file referenced by the SQL database that has been removed from the filesystem.

See also these additional explanations on why VCS ensures safe hot backups.

Blob Storage

By default Nuxeo stores all blobs on the filesystem in a lock-free, cluster-aware manner, based on the "Content-addressable storage" paradigm. Instead of the filesystem, you can also elect to store the blobs in Amazon S3 or in other external storage systems using the appropriate plugin. See File Storage Configuration for more on the blob storage mechanism.

You can also choose to store blobs in the SQL database but we don't recommend it. In our experience storing blobs in a SQL database leads to a lot of problems:

  • Performances really drops.
  • Some JDBC drivers load blobs in the JVM memory which can lead to memory issues.
  • Database backup/restore is very slow.
  • Database replication (master/slave) is very slow too.

If despite these recommendations you still want to choose this architectural option, you can use the dedicated plugin available at https://github.com/nuxeo/nuxeo-core-binarymanager-sql/.

5 days ago manonlumeau Added content-review-lts2017 label
a month ago manonlumeau NXDOC-1346-FT review screenshot
2 years ago Manon Lumeau 44
3 years ago Alain Escaffre 43
4 years ago Solen Guitter 42
4 years ago Solen Guitter 41
4 years ago Florent Guillaume 40
4 years ago Florent Guillaume 39
4 years ago Solen Guitter 38 | Fixed typos
4 years ago Alain Escaffre 37
4 years ago Alain Escaffre 36
4 years ago Solen Guitter 35 | Formatting
5 years ago Solen Guitter 34
5 years ago Solen Guitter 33 | Format
5 years ago Benoit Delbosc 32
5 years ago Benoit Delbosc 31
5 years ago Benoit Delbosc 30 | Reverted from v. 28
5 years ago Benoit Delbosc 29
5 years ago Benoit Delbosc 28
5 years ago Solen Guitter 27
5 years ago Benoit Delbosc 26 | Update ACLR table
6 years ago Florent Guillaume 24 | relation for 5.5
6 years ago Florent Guillaume 25 | Migrated to Confluence 4.0
6 years ago Solen Guitter 23 | replaced 5.4.3 with 5.5
6 years ago Benoit Delbosc 22
6 years ago Benoit Delbosc 21 | Adding more info on read acls optimization
7 years ago Florent Guillaume 20
7 years ago Florent Guillaume 19
7 years ago Florent Guillaume 18 | Added ancestors table for PostgreSQL
7 years ago Florent Guillaume 17
7 years ago Florent Guillaume 16 | Updated locks table info after NXP-6054
7 years ago Stéphane Lacoin 14
7 years ago Stéphane Lacoin 15
7 years ago Stéphane Lacoin 13
7 years ago Florent Guillaume 12
7 years ago Florent Guillaume 11 | Improved File section
7 years ago Florent Guillaume 10 | Improved File section
7 years ago Florent Guillaume 9 | Added mixins info
7 years ago Florent Guillaume 8 | Updated version info
7 years ago Florent Guillaume 7 | Documented relations in 5.3.2
7 years ago Florent Guillaume 6
7 years ago Florent Guillaume 5
7 years ago Florent Guillaume 4
7 years ago Florent Guillaume 3
7 years ago Florent Guillaume 2
7 years ago Florent Guillaume 1
History: Created by Florent Guillaume