LevelDB     by


   ohyecloudy
    homepage : http://ohyecloudy.com
    twitter : @ohyecloudy
   아꿈사 :   http://cafe.naver.com/architect1.cafe


                                     2011.08.06
아~ 이런 게 있구나
            본 발표 목적




    좀 더 쉽게 얘기하자면 ‘깊이가 없다’입니다.
따끈~      따끈~        따끈~
따끈~      따끈~        따끈~
2011.7.27 구글 오픈소스 블로그에 공식적으로 소개



따끈~      따끈~        따끈~
따끈~      따끈~        따끈~
따끈~      따끈~        따끈~
LevelDB는
  a fast and lightweight
  key/value DB library
                    입니다.
LevelDB는
  a fast and lightweight
  key/value DB library
                    입니다.
       NoSQL
Embedded DB
                  e.g. SQLite
LevelDB는
  a fast and lightweight
  key/value DB library
                      입니다.
LevelDB는
  a fast and lightweight
  NoSQL Embedded DB
  key/value DB library
                    입니다.
왜 만들었을까?
       뭐땀시
웹 애플리케이션용 DB 때문에
 웹 애플리케이션이 저장될 캐시를 결정.
 지금은 브라우저(크롬, FF, IE…)가 알아서 저장.
 오프라인 대비가 잘돼서 모바일에 좋다.
Web SQL Database는 탈락
       SQL은 웹 개발과 맞지 않다.
       ISO 표준이 존재하지만
       벤더마다 다양한 SQL문을 지원
IndexedDB 가 유력
    B-tree 기반 key/value 저장소
    key/value면 웹 애플리케이션이
    사용하기에 충분
LevelDB로
 IndexedDB를 구현하려고
맛만 살짝~

LevelDB 특징 보기
• Keys and values are arbitrary byte arrays.
• Data is stored sorted by key.
• The basic operations are Put(key,value),
  Get(key), Delete(key).
• Multiple changes can be made in one atomic
  batch.
• Users can create a transient snapshot to get
  a consistent view of data.
• Forward and backward iteration is supported
  over the data.
• Data is automatically compressed using the
  Snappy compression library.
• Keys and values are arbitrary byte arrays.
• Data is stored sorted by key.
• The basic operations are Put(key,value),
  Get(key), Delete(key).
• Multiple changes can be made in one atomic
  batch.
• Users can create a transient snapshot to get
  a consistent view of data.
• Forward and backward iteration is supported
  over the data.
• Data is automatically compressed using the
  Snappy compression library.
std::string value;
leveldb::Status s =
    db->Get(
        leveldb::ReadOptions(),
        key1,
        &value);

s = db->Put(
        leveldb::WriteOptions(),
        key2,
        value);

s = db->Delete(
        leveldb::WriteOptions(),
        key1);
• Keys and values are arbitrary byte arrays.
• Data is stored sorted by key.
• The basic operations are Put(key,value),
                  simple key/value store와 다른 특징.
  Get(key), Delete(key).
                  a persistent ordered map
• Multiple changes can be made in one atomic
                  custom comparison function 지원.
  batch.          range query가 싸겠다.
• Users can create a transient iteration이 가능 get
                  이런 특징 때문에 snapshot to
  a consistent view of data.
• Forward and backward iteration is supported
  over the data.
• Data is automatically compressed using the
  Snappy compression library.
// DB에 있는 모든 key/value 순회

leveldb::Iterator* it =
    db->NewIterator(leveldb::ReadOptions());

for (it->SeekToFirst();
     it->Valid(); it->Next())
{
    cout << it->key().ToString() << ": “ <<
        it->value().ToString() << endl;
}
• Keys and values are arbitrary byte arrays.
• Data is stored sorted by key.
• The basic operations are Put(key,value),
  Get(key), Delete(key).
• Multiple changes can be made in one atomic
  batch.
• Users can create a transient snapshot to get
  a consistent view of data.
• Forward and backward iteration is supported
  over the data.
• Data is automatically compressed using the
  Snappy compression library.
leveldb::ReadOptions options;
options.snapshot = db->GetSnapshot();

//…
// db를 업데이트한다.

leveldb::Iterator* iter = db->NewIterator(options);

// 업데이트를 하기 전 Shapshot DB를 읽는다.

delete iter;
db->ReleaseSnapshot(options.snapshot);
Fast를 붙일 만 해?
전체적으로 뛰어난 성능
다만 value 사이즈가 크면 성능 하락
 (value 사이즈가 100,000 byte일 때 성능)




구현상 key와 value를 적어도 두 번 복사하기 때문
정 리
• LevelDB는 NoSQL Embedded DB 이다.
• 웹 애플리케이션용 DB 때문에 만들었다.
  – IndexedDB
  – 다른 곳에도 더 사용하지 않을까?
• key로 정렬해서 저장한다.
• 전체적으로 뛰어난 성능
  – value 사이즈가 크면 성능 저하
References
LevelDB: A Fast Persistent Key-Value Store
http://nosql-database.org/
http://code.google.com/p/leveldb/
http://en.wikipedia.org/wiki/Embedded_database
http://kldp.org/node/123247
http://www.zdnet.co.kr/news/news_view.asp?artice_id=20110801100022
http://xguru.net/621
http://leveldb.googlecode.com/svn/trunk/doc/index.html
http://leveldb.googlecode.com/svn/trunk/doc/impl.html
http://leveldb.googlecode.com/svn/trunk/doc/benchmark.html
Hacker News
LevelDB 간단한 소개
LevelDB 간단한 소개

LevelDB 간단한 소개

  • 1.
    LevelDB by ohyecloudy homepage : http://ohyecloudy.com twitter : @ohyecloudy 아꿈사 : http://cafe.naver.com/architect1.cafe 2011.08.06
  • 2.
    아~ 이런 게있구나 본 발표 목적 좀 더 쉽게 얘기하자면 ‘깊이가 없다’입니다.
  • 3.
    따끈~ 따끈~ 따끈~ 따끈~ 따끈~ 따끈~ 2011.7.27 구글 오픈소스 블로그에 공식적으로 소개 따끈~ 따끈~ 따끈~ 따끈~ 따끈~ 따끈~ 따끈~ 따끈~ 따끈~
  • 4.
    LevelDB는 afast and lightweight key/value DB library 입니다.
  • 5.
    LevelDB는 afast and lightweight key/value DB library 입니다. NoSQL
  • 6.
    Embedded DB e.g. SQLite LevelDB는 a fast and lightweight key/value DB library 입니다.
  • 7.
    LevelDB는 afast and lightweight NoSQL Embedded DB key/value DB library 입니다.
  • 8.
  • 9.
    웹 애플리케이션용 DB때문에 웹 애플리케이션이 저장될 캐시를 결정. 지금은 브라우저(크롬, FF, IE…)가 알아서 저장. 오프라인 대비가 잘돼서 모바일에 좋다.
  • 10.
    Web SQL Database는탈락 SQL은 웹 개발과 맞지 않다. ISO 표준이 존재하지만 벤더마다 다양한 SQL문을 지원
  • 11.
    IndexedDB 가 유력 B-tree 기반 key/value 저장소 key/value면 웹 애플리케이션이 사용하기에 충분
  • 12.
  • 13.
  • 14.
    • Keys andvalues are arbitrary byte arrays. • Data is stored sorted by key. • The basic operations are Put(key,value), Get(key), Delete(key). • Multiple changes can be made in one atomic batch. • Users can create a transient snapshot to get a consistent view of data. • Forward and backward iteration is supported over the data. • Data is automatically compressed using the Snappy compression library.
  • 15.
    • Keys andvalues are arbitrary byte arrays. • Data is stored sorted by key. • The basic operations are Put(key,value), Get(key), Delete(key). • Multiple changes can be made in one atomic batch. • Users can create a transient snapshot to get a consistent view of data. • Forward and backward iteration is supported over the data. • Data is automatically compressed using the Snappy compression library.
  • 16.
    std::string value; leveldb::Status s= db->Get( leveldb::ReadOptions(), key1, &value); s = db->Put( leveldb::WriteOptions(), key2, value); s = db->Delete( leveldb::WriteOptions(), key1);
  • 17.
    • Keys andvalues are arbitrary byte arrays. • Data is stored sorted by key. • The basic operations are Put(key,value), simple key/value store와 다른 특징. Get(key), Delete(key). a persistent ordered map • Multiple changes can be made in one atomic custom comparison function 지원. batch. range query가 싸겠다. • Users can create a transient iteration이 가능 get 이런 특징 때문에 snapshot to a consistent view of data. • Forward and backward iteration is supported over the data. • Data is automatically compressed using the Snappy compression library.
  • 18.
    // DB에 있는모든 key/value 순회 leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions()); for (it->SeekToFirst(); it->Valid(); it->Next()) { cout << it->key().ToString() << ": “ << it->value().ToString() << endl; }
  • 19.
    • Keys andvalues are arbitrary byte arrays. • Data is stored sorted by key. • The basic operations are Put(key,value), Get(key), Delete(key). • Multiple changes can be made in one atomic batch. • Users can create a transient snapshot to get a consistent view of data. • Forward and backward iteration is supported over the data. • Data is automatically compressed using the Snappy compression library.
  • 20.
    leveldb::ReadOptions options; options.snapshot =db->GetSnapshot(); //… // db를 업데이트한다. leveldb::Iterator* iter = db->NewIterator(options); // 업데이트를 하기 전 Shapshot DB를 읽는다. delete iter; db->ReleaseSnapshot(options.snapshot);
  • 21.
  • 22.
  • 23.
    다만 value 사이즈가크면 성능 하락 (value 사이즈가 100,000 byte일 때 성능) 구현상 key와 value를 적어도 두 번 복사하기 때문
  • 24.
  • 25.
    • LevelDB는 NoSQLEmbedded DB 이다. • 웹 애플리케이션용 DB 때문에 만들었다. – IndexedDB – 다른 곳에도 더 사용하지 않을까? • key로 정렬해서 저장한다. • 전체적으로 뛰어난 성능 – value 사이즈가 크면 성능 저하
  • 26.
    References LevelDB: A FastPersistent Key-Value Store http://nosql-database.org/ http://code.google.com/p/leveldb/ http://en.wikipedia.org/wiki/Embedded_database http://kldp.org/node/123247 http://www.zdnet.co.kr/news/news_view.asp?artice_id=20110801100022 http://xguru.net/621 http://leveldb.googlecode.com/svn/trunk/doc/index.html http://leveldb.googlecode.com/svn/trunk/doc/impl.html http://leveldb.googlecode.com/svn/trunk/doc/benchmark.html Hacker News