Class: LMDB::Environment
- Inherits:
-
Object
- Object
- LMDB::Environment
- Defined in:
- ext/lmdb_ext/lmdb_ext.c,
ext/lmdb_ext/lmdb_ext.c
Overview
The Environment is the root object for all LMDB operations.
An LMDB “environment” is a collection of one or more “databases” (key-value tables), along with transactions to modify those databases and cursors to iterate through them.
An environment – and its collection of databases – is normally stored in a directory. That directory will contain two files:
-
data.mdb: all the records in all the databases in the environment -
lock.mdb: state of transactions that may be going on in the environment.
An environment can contain multiple databases. Each of the databases has a string name (“mydatabase”, “db.3.1982”). You use the database name to open the database within the environment.
Class Method Summary collapse
-
.new(path, opts) {|env| ... } ⇒ Environment
Open an LMDB database environment.
Instance Method Summary collapse
- #active_txn ⇒ Transaction
-
#clear_flags(flags) ⇒ Object
Clear one or more flags in the environment.
-
#close ⇒ Object
Close an environment, completing all IOs and cleaning up database state if needed.
-
#copy(path) ⇒ Object
Create a copy (snapshot) of an environment.
-
#database(name, options) ⇒ Database
Opens a database within the environment.
-
#flags ⇒ Array
Return the flags that are set in this environment.
-
#info ⇒ Hash
Return useful information about an environment.
- #mapsize=(size) ⇒ Object
-
#path ⇒ String
Return the path to the database environment files.
-
#set_flags(flags) ⇒ Object
Set one or more flags in the environment.
-
#stat ⇒ Hash
Return useful statistics about an environment.
-
#sync(force) ⇒ Object
Flush the data buffers to disk.
-
#transaction(readonly) {|txn| ... } ⇒ Object
Begin a transaction.
Class Method Details
.new(path, opts) {|env| ... } ⇒ Environment
603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 603 static VALUE environment_new(int argc, VALUE *argv, VALUE klass) { VALUE path, option_hash; #ifdef RB_SCAN_ARGS_KEYWORDS rb_scan_args_kw(RB_SCAN_ARGS_LAST_HASH_KEYWORDS, argc, argv, "1:", &path, &option_hash); #else rb_scan_args(argc, argv, "1:", &path, &option_hash); #endif EnvironmentOptions = { .flags = MDB_NOTLS, .maxreaders = -1, .maxdbs = 128, .mapsize = 0, .mode = 0755, }; if (!NIL_P(option_hash)) rb_hash_foreach(option_hash, (int (*)(ANYARGS)), (VALUE)&); MDB_env* env; check(mdb_env_create(&env)); Environment* environment; VALUE venv = Data_Make_Struct(cEnvironment, Environment, environment_mark, environment_free, environment); environment->env = env; environment->thread_txn_hash = rb_hash_new(); environment->txn_thread_hash = rb_hash_new(); if (.maxreaders > 0) check(mdb_env_set_maxreaders(env, .maxreaders)); if (.mapsize > 0) check(mdb_env_set_mapsize(env, .mapsize)); check(mdb_env_set_maxdbs(env, .maxdbs <= 0 ? 1 : .maxdbs)); VALUE = (path, Qnil); check(mdb_env_open(env, StringValueCStr(), .flags, .mode)); if (rb_block_given_p()) return rb_ensure(rb_yield, venv, environment_close, venv); return venv; } |
Instance Method Details
#active_txn ⇒ Transaction
754 755 756 757 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 754 static VALUE environment_active_txn(VALUE self) { ENVIRONMENT(self, environment); return rb_hash_aref(environment->thread_txn_hash, rb_thread_current()); } |
#clear_flags(flags) ⇒ Object
740 741 742 743 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 740 static VALUE environment_clear_flags(int argc, VALUE* argv, VALUE self) { environment_change_flags(argc, argv, self, 0); return Qnil; } |
#close ⇒ Object
422 423 424 425 426 427 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 422 static VALUE environment_close(VALUE self) { ENVIRONMENT(self, environment); mdb_env_close(environment->env); environment->env = 0; return Qnil; } |
#copy(path) ⇒ Object
515 516 517 518 519 520 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 515 static VALUE environment_copy(VALUE self, VALUE path) { ENVIRONMENT(self, environment); VALUE = (path, Qnil); check(mdb_env_copy(environment->env, StringValueCStr())); return Qnil; } |
#database(name, options) ⇒ Database
883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 883 static VALUE environment_database(int argc, VALUE *argv, VALUE self) { ENVIRONMENT(self, environment); if (!active_txn(self)) return call_with_transaction(self, self, "database", argc, argv, 0); VALUE name, option_hash; #ifdef RB_SCAN_ARGS_KEYWORDS rb_scan_args_kw(RB_SCAN_ARGS_KEYWORDS, argc, argv, "01:", &name, &option_hash); #else rb_scan_args(argc, argv, "01:", &name, &option_hash); #endif int flags = 0; if (!NIL_P(option_hash)) rb_hash_foreach(option_hash, (int (*)(ANYARGS))database_flags, (VALUE)&flags); MDB_dbi dbi; check(mdb_dbi_open(need_txn(self), NIL_P(name) ? 0 : StringValueCStr(name), flags, &dbi)); Database* database; VALUE vdb = Data_Make_Struct(cDatabase, Database, database_mark, free, database); database->dbi = dbi; database->env = self; return vdb; } |
#flags ⇒ Array
667 668 669 670 671 672 673 674 675 676 677 678 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 667 static VALUE environment_flags(VALUE self) { unsigned int flags; ENVIRONMENT(self, environment); check(mdb_env_get_flags(environment->env, &flags)); VALUE ret = rb_ary_new(); #define FLAG(const, name) if (flags & MDB_##const) rb_ary_push(ret, ID2SYM(rb_intern(#name))); #include "env_flags.h" #undef FLAG return ret; } |
#info ⇒ Hash
483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 483 static VALUE environment_info(VALUE self) { MDB_envinfo info; ENVIRONMENT(self, environment); check(mdb_env_info(environment->env, &info)); VALUE ret = rb_hash_new(); #define INFO_SET(name) rb_hash_aset(ret, ID2SYM(rb_intern(#name)), SIZET2NUM((size_t)info.me_##name)); INFO_SET(mapaddr); INFO_SET(mapsize); INFO_SET(last_pgno); INFO_SET(last_txnid); INFO_SET(maxreaders); INFO_SET(numreaders); #undef INFO_SET return ret; } |
#mapsize=(size) ⇒ Object
692 693 694 695 696 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 692 static VALUE environment_set_mapsize(VALUE self, VALUE size) { ENVIRONMENT(self, environment); check(mdb_env_set_mapsize(environment->env, NUM2LONG(size))); return Qnil; } |
#path ⇒ String
685 686 687 688 689 690 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 685 static VALUE environment_path(VALUE self) { const char* path; ENVIRONMENT(self, environment); check(mdb_env_get_path(environment->env, &path)); return rb_str_new2(path); } |
#set_flags(flags) ⇒ Object
725 726 727 728 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 725 static VALUE environment_set_flags(int argc, VALUE* argv, VALUE self) { environment_change_flags(argc, argv, self, 1); return Qnil; } |
#stat ⇒ Hash
465 466 467 468 469 470 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 465 static VALUE environment_stat(VALUE self) { ENVIRONMENT(self, environment); MDB_stat stat; check(mdb_env_stat(environment->env, &stat)); return stat2hash(&stat); } |
#sync(force) ⇒ Object
535 536 537 538 539 540 541 542 543 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 535 static VALUE environment_sync(int argc, VALUE *argv, VALUE self) { ENVIRONMENT(self, environment); VALUE force; rb_scan_args(argc, argv, "01", &force); check(mdb_env_sync(environment->env, RTEST(force))); return Qnil; } |
#transaction(readonly) {|txn| ... } ⇒ Object
826 827 828 829 830 831 832 833 834 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 826 static VALUE environment_transaction(int argc, VALUE *argv, VALUE self) { rb_need_block(); VALUE readonly; rb_scan_args(argc, argv, "01", &readonly); unsigned int flags = RTEST(readonly) ? MDB_RDONLY : 0; return with_transaction(self, rb_yield, Qnil, flags); } |