Revision edf84ac2a1afbc3217ea98a622520c9e6cdf541f authored by Iddan Aaronsohn on 17 October 2019, 20:01:24 UTC, committed by Iddan Aaronsohn on 08 November 2019, 15:16:12 UTC
1 parent ce2e8e0
migration.md
# Migration
## From Cayley 0.6.1 to 0.7.x
First you need to dump all the data from the database via v0.6.1:
```bash
./cayley-0.6 dump --db <backend> --dbpath <address> --dump_type pquads --dump ./data.pq.gz
```
or using config file:
```bash
./cayley-0.6 dump --config <config> --dump_type pquads --dump ./data.pq.gz
```
And load the data into new database via v0.7.x \(`pq` file extension is important\):
```bash
./cayley load --init -d <new-backend> -a <new-address> -i ./data.pq.gz
```
or using config file:
```bash
./cayley load --init -c <new-config> -i ./data.pq.gz
```
### Dump via text format
An above guide uses Cayley-specific binary format to avoid encoding and parsing overhead and to compress output file better.
As an alternative, a standard nquads file format can be used to dump and load data \(note `nq` extension\):
```bash
./cayley-0.6 dump --config <config> --dump ./data.nq.gz
./cayley load --init -c <new-config> -i ./data.nq.gz
```
### Bolt, LevelDB, MongoDB
Cayley v0.7.0 is still able to read and write databases of these types in old format. It can be accessed by changing backend name from `bolt`/`leveldb`/`mongo` to `bolt1`/`leveldb1`/`mongo1`. Thus, you can use guide for moving data between different backends for v0.7.x \(see below\).
**Note:** support for old versions will be dropped starting from v0.7.1.
### SQL
Data format for SQL between v0.6.1 and v0.7.x has not changed significantly. Database can be upgraded by executing the following SQL statements:
```sql
ALTER TABLE quads DROP id;
ALTER TABLE nodes ADD refs INT DEFAULT 0 NOT NULL;
ALTER TABLE nodes ALTER COLUMN refs DROP DEFAULT;
UPDATE nodes SET refs =
(SELECT count(1) FROM quads WHERE subject_hash = nodes.hash) +
(SELECT count(1) FROM quads WHERE predicate_hash = nodes.hash) +
(SELECT count(1) FROM quads WHERE object_hash = nodes.hash) +
(SELECT count(1) FROM quads WHERE label_hash = nodes.hash);
```
## From different backend \(Cayley 0.7+\)
First you need to dump all the data from old backend \(`pq` extension is important\):
```bash
./cayley dump -d <backend> -a <address> -o ./data.pq.gz
```
or using config file:
```bash
./cayley dump -c <config> -o ./data.pq.gz
```
And load the data into a new backend and/or database:
```bash
./cayley load --init -d <new-backend> -a <new-address> -i ./data.pq.gz
```
or using config file:
```bash
./cayley load --init -c <new-config> -i ./data.pq.gz
```
### Dump via text format
An above guide uses Cayley-specific binary format to avoid encoding and parsing overhead and to compress output file better.
As an alternative, a standard nquads file format can be used to dump and load data \(note `nq` extension\):
```bash
./cayley dump -c <config> -o ./data.nq.gz
./cayley load --init -c <new-config> -i ./data.nq.gz
```
Computing file changes ...