Nessie可以管理像git 分支,合并數(shù)據(jù)源等一些特性;
- 受git的版本管理啟發(fā)
- 跨表事務和可見性
- 支持hive,spark,AWS Athena,dremio,管理其數(shù)據(jù)湖的數(shù)據(jù)
- 深度和Apache Iceberg, Delta Lake and Hive 合作
- 可以用docker image,AWS lamada 以及github 源碼運行
nessie是一個基于對象存儲的服務和Library,你能維護多版本的數(shù)據(jù),以及利用gi t一樣的功能去管理數(shù)據(jù)湖的Branch和TAG;Nessie通過一下的表格式去進行版本管理的特性;
- apache Iceberg table
- Delta Lake tables
- Hive metastore table
- SQL views
基本概念
Nessie深受GIT啟發(fā);主要的概念大都是來源于GIT的概念;在很多情況下,你能夠簡單的替換Nessie中的一些概念;Nessie主要概念包括:
- commit:在某個時間點,所有表的一致性快照
- Branch:用戶將commits增加到的一個引用位置
- Tag: 一次特定提交指向
- Hash: 一次特定提交生成的Hash字符串
除了上述一些概念,Nessie從一個main單一分支開始,并且指向特定的開始時間;用戶可以馬上向表中增加分支,如下偽代碼:
$ create t1
...
$ insert 2 records into t1
...
$ create t2
...
$ insert 2 records into t2
...
一個用戶可以使用Nessie的客戶端去看主分支上所有的分支;你可以看到每次提交自動留下的操作記錄;
$ nessie log
hash4 t2 data added
hash3 t2 created
hash2 t1 data added
hash1 t1 created
一個用戶可以在某個特定的時間t創(chuàng)建新的Tag; 在此之后,用戶能夠繼續(xù)改變表,但是在t時刻的數(shù)據(jù)版本將在Nessie中進行維護;
$ nessie tag mytag hash4
$ insert records into t1
$ select count(*) from t1 join t2
.. record 1 ..
.. record 2 ..
.. record 3 ..
.. 3 records ..
$ select count(*) from t1@mytag join t2@mytag
.. record 1 ..
.. record 2 ..
.. only 2 records ..
數(shù)據(jù)和元數(shù)據(jù)
Nessie 不需要拷貝你當下的數(shù)據(jù);然后,他會按照你的數(shù)據(jù)集將文件進行隔離;不管你使用的是spark,Hive,或者其他的工具,你定義的每個變化操作,增加,刪除你定義的數(shù)據(jù)源,都會改變你定義的表。Nessie會在每個時間點跟蹤哪些文件與表相關,然后根據(jù)你的需要調用這些文件;
擴展性和性能
Nessie 用來構建大型的數(shù)據(jù)倉庫;Nessie 支持百萬級別的表和每秒一千次的提交;因為Nessie構建在Iceberg和delta Lake之上,每個表中有百萬級別的文件;對此,Nessie可以支持比當今最大數(shù)倉大幾個數(shù)量級的數(shù)據(jù)倉庫;這些可能性大多都依賴于Nessie中的 表元數(shù)據(jù)的事務管理的隔離;
技術上
Nessie 可以多種方式部署,同時他由多個基本的Nessie service 構成;同時它通過REST APIS和簡單的UI界面進行暴露;這些服務像多個包一些去暴露Nessie的版本管理的能力
TODO
Nessie can be deployed in multiple ways and is composed primarily of the Nessie service, which exposes a set of REST APIs and a simple browser UI. This service works with multiple libraries to expose Nessie’s version control capabilities to common data management technologies.
Nessie was built as a Cloud native technology and is designed to be highly scalable, performant and resilient. Built on Java and leveraging Quarkus, it is compiled to a GraalVM native image that starts in less than 20ms. This makes Nessie work very well in Docker and FaaS environments. Nessie has a pluggable storage backend and comes pre-packaged with support for DynamoDB and local storage.