FIFO implementation improved: let's see the results.
This commit is contained in:
parent
e2841a263b
commit
09678965e0
@ -19,6 +19,6 @@ awk '{ print $1 }' < $d/ram_index.d > it
|
|||||||
mkdir data
|
mkdir data
|
||||||
|
|
||||||
echo "from truncated data (.t) to graphed data data/XXX.d"
|
echo "from truncated data (.t) to graphed data data/XXX.d"
|
||||||
paste it $d/ram_index.t $d/cached_index.t $d/semi_index.t $d/uncached_index.t > ./data/index.d
|
paste it $d/ram_index.t $d/cached_index.t $d/fifo_index.t $d/semi_index.t $d/uncached_index.t > ./data/index.d
|
||||||
paste it $d/ram_partitions.t $d/cached_partitions.t $d/semi_partitions.t $d/uncached_partitions.t > ./data/partitions.d
|
paste it $d/ram_partitions.t $d/cached_partitions.t $d/fifo_partitions.t $d/semi_partitions.t $d/uncached_partitions.t > ./data/partitions.d
|
||||||
paste it $d/ram_tags.t $d/cached_tags.t $d/semi_tags.t $d/uncached_tags.t > ./data/tags.d
|
paste it $d/ram_tags.t $d/cached_tags.t $d/fifo_tags.t $d/semi_tags.t $d/uncached_tags.t > ./data/tags.d
|
||||||
|
@ -86,13 +86,15 @@ def prepare_env(storage, name, s_index, s_partition, s_tags, &)
|
|||||||
end
|
end
|
||||||
|
|
||||||
def batch()
|
def batch()
|
||||||
cars_ram = DODB::RAMOnlySpecDataBase(Car).new
|
cars_ram = SPECDB::RAMOnly(Car).new
|
||||||
cars_cached = DODB::CachedSpecDataBase(Car).new
|
cars_cached = SPECDB::Cached(Car).new
|
||||||
cars_semi = DODB::SpecDataBase(Car).new "-semi"
|
cars_fifo = DODB::FIFOSpecDataBase(Car).new
|
||||||
cars_uncached = DODB::SpecDataBase(Car).new
|
cars_semi = SPECDB::Uncached(Car).new "-semi"
|
||||||
|
cars_uncached = SPECDB::Uncached(Car).new
|
||||||
|
|
||||||
ram_Sby_name, ram_Sby_color, ram_Sby_keywords = ram_indexes cars_ram
|
ram_Sby_name, ram_Sby_color, ram_Sby_keywords = ram_indexes cars_ram
|
||||||
cached_Sby_name, cached_Sby_color, cached_Sby_keywords = cached_indexes cars_cached
|
cached_Sby_name, cached_Sby_color, cached_Sby_keywords = cached_indexes cars_cached
|
||||||
|
fifo_Sby_name, fifo_Sby_color, fifo_Sby_keywords = cached_indexes cars_fifo
|
||||||
semi_Sby_name, semi_Sby_color, semi_Sby_keywords = cached_indexes cars_semi
|
semi_Sby_name, semi_Sby_color, semi_Sby_keywords = cached_indexes cars_semi
|
||||||
uncached_Sby_name, uncached_Sby_color, uncached_Sby_keywords = uncached_indexes cars_uncached
|
uncached_Sby_name, uncached_Sby_color, uncached_Sby_keywords = uncached_indexes cars_uncached
|
||||||
|
|
||||||
@ -123,8 +125,9 @@ def batch()
|
|||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_env cars_cached, "cached", cached_Sby_name, cached_Sby_color, cached_Sby_keywords, &fn
|
|
||||||
prepare_env cars_ram, "ram", ram_Sby_name, ram_Sby_color, ram_Sby_keywords, &fn
|
prepare_env cars_ram, "ram", ram_Sby_name, ram_Sby_color, ram_Sby_keywords, &fn
|
||||||
|
prepare_env cars_cached, "cached", cached_Sby_name, cached_Sby_color, cached_Sby_keywords, &fn
|
||||||
|
prepare_env cars_fifo, "fifo", fifo_Sby_name, fifo_Sby_color, fifo_Sby_keywords, &fn
|
||||||
prepare_env cars_semi, "semi", semi_Sby_name, semi_Sby_color, semi_Sby_keywords, &fn
|
prepare_env cars_semi, "semi", semi_Sby_name, semi_Sby_color, semi_Sby_keywords, &fn
|
||||||
prepare_env cars_uncached, "uncached", uncached_Sby_name, uncached_Sby_color, uncached_Sby_keywords, &fn
|
prepare_env cars_uncached, "uncached", uncached_Sby_name, uncached_Sby_color, uncached_Sby_keywords, &fn
|
||||||
end
|
end
|
||||||
@ -141,10 +144,10 @@ def perform_add(storage : DODB::Storage(Car))
|
|||||||
end
|
end
|
||||||
|
|
||||||
def batch_add()
|
def batch_add()
|
||||||
cars_ram = DODB::RAMOnlySpecDataBase(Car).new
|
cars_ram = SPECDB::RAMOnly(Car).new
|
||||||
cars_cached = DODB::CachedSpecDataBase(Car).new
|
cars_cached = SPECDB::Cached(Car).new
|
||||||
cars_semi = DODB::SpecDataBase(Car).new "-semi"
|
cars_semi = SPECDB::Uncached(Car).new "-semi"
|
||||||
cars_uncached = DODB::SpecDataBase(Car).new
|
cars_uncached = SPECDB::Uncached(Car).new
|
||||||
|
|
||||||
ram_indexes cars_ram
|
ram_indexes cars_ram
|
||||||
cached_indexes cars_cached
|
cached_indexes cars_cached
|
||||||
|
@ -1,12 +1,8 @@
|
|||||||
class DODB::SpecDataBase(V) < DODB::Storage::Basic(V)
|
class SPECDB::Uncached(V) < DODB::Storage::Basic(V)
|
||||||
property storage_dir : String
|
property storage_dir : String
|
||||||
def initialize(storage_ext = "", remove_previous_data = true)
|
def initialize(storage_ext = "", remove_previous_data = true)
|
||||||
@storage_dir = "specdb-storage-uncached#{storage_ext}"
|
@storage_dir = "specdb-storage-uncached#{storage_ext}"
|
||||||
|
::FileUtils.rm_rf storage_dir if remove_previous_data
|
||||||
if remove_previous_data
|
|
||||||
::FileUtils.rm_rf storage_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
super storage_dir
|
super storage_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -15,15 +11,11 @@ class DODB::SpecDataBase(V) < DODB::Storage::Basic(V)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class DODB::CachedSpecDataBase(V) < DODB::Storage::Cached(V)
|
class SPECDB::Cached(V) < DODB::Storage::Cached(V)
|
||||||
property storage_dir : String
|
property storage_dir : String
|
||||||
def initialize(storage_ext = "", remove_previous_data = true)
|
def initialize(storage_ext = "", remove_previous_data = true)
|
||||||
@storage_dir = "specdb-storage-cached#{storage_ext}"
|
@storage_dir = "specdb-storage-cached#{storage_ext}"
|
||||||
|
::FileUtils.rm_rf storage_dir if remove_previous_data
|
||||||
if remove_previous_data
|
|
||||||
::FileUtils.rm_rf storage_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
super storage_dir
|
super storage_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -32,15 +24,24 @@ class DODB::CachedSpecDataBase(V) < DODB::Storage::Cached(V)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class DODB::RAMOnlySpecDataBase(V) < DODB::Storage::RAMOnly(V)
|
class DODB::FIFOSpecDataBase(V) < DODB::Storage::Stacked(V)
|
||||||
|
property storage_dir : String
|
||||||
|
def initialize(storage_ext = "", remove_previous_data = true)
|
||||||
|
@storage_dir = "specdb-storage-fifo#{storage_ext}"
|
||||||
|
::FileUtils.rm_rf storage_dir if remove_previous_data
|
||||||
|
super storage_dir
|
||||||
|
end
|
||||||
|
|
||||||
|
def rm_storage_dir
|
||||||
|
::FileUtils.rm_rf @storage_dir
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class SPECDB::RAMOnly(V) < DODB::Storage::RAMOnly(V)
|
||||||
property storage_dir : String
|
property storage_dir : String
|
||||||
def initialize(storage_ext = "", remove_previous_data = true)
|
def initialize(storage_ext = "", remove_previous_data = true)
|
||||||
@storage_dir = "specdb-storage-ram#{storage_ext}"
|
@storage_dir = "specdb-storage-ram#{storage_ext}"
|
||||||
|
::FileUtils.rm_rf storage_dir if remove_previous_data
|
||||||
if remove_previous_data
|
|
||||||
::FileUtils.rm_rf storage_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
super storage_dir
|
super storage_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@ corvet0 = Car.new "Corvet-0", "red", [ "shiny", "impressive", "fast", "elegant"
|
|||||||
describe "uncached, cached and ram indexes" do
|
describe "uncached, cached and ram indexes" do
|
||||||
it "RAM DB - add items, add indexes, search, reindex, search" do
|
it "RAM DB - add items, add indexes, search, reindex, search" do
|
||||||
|
|
||||||
cars_ram0 = DODB::RAMOnlySpecDataBase(Car).new "-0"
|
cars_ram0 = SPECDB::RAMOnly(Car).new "-0"
|
||||||
cars_ram1 = DODB::RAMOnlySpecDataBase(Car).new "-1"
|
cars_ram1 = SPECDB::RAMOnly(Car).new "-1"
|
||||||
cars_ram2 = DODB::RAMOnlySpecDataBase(Car).new "-2"
|
cars_ram2 = SPECDB::RAMOnly(Car).new "-2"
|
||||||
|
|
||||||
add_cars cars_ram0, 1
|
add_cars cars_ram0, 1
|
||||||
add_cars cars_ram1, 1
|
add_cars cars_ram1, 1
|
||||||
@ -42,9 +42,9 @@ end
|
|||||||
|
|
||||||
describe "tracking inconsistencies between implementations" do
|
describe "tracking inconsistencies between implementations" do
|
||||||
it "index - partitions - tags" do
|
it "index - partitions - tags" do
|
||||||
cars_ram0 = DODB::RAMOnlySpecDataBase(Car).new "-0"
|
cars_ram0 = SPECDB::RAMOnly(Car).new "-0"
|
||||||
cars_ram1 = DODB::RAMOnlySpecDataBase(Car).new "-1"
|
cars_ram1 = SPECDB::RAMOnly(Car).new "-1"
|
||||||
cars_ram2 = DODB::RAMOnlySpecDataBase(Car).new "-2"
|
cars_ram2 = SPECDB::RAMOnly(Car).new "-2"
|
||||||
|
|
||||||
uncached_searchby_name, uncached_searchby_color, uncached_searchby_keywords = uncached_indexes cars_ram0
|
uncached_searchby_name, uncached_searchby_color, uncached_searchby_keywords = uncached_indexes cars_ram0
|
||||||
cached_searchby_name, cached_searchby_color, cached_searchby_keywords = cached_indexes cars_ram1
|
cached_searchby_name, cached_searchby_color, cached_searchby_keywords = cached_indexes cars_ram1
|
||||||
|
@ -9,7 +9,7 @@ end
|
|||||||
describe "DODB::Storage::Basic" do
|
describe "DODB::Storage::Basic" do
|
||||||
describe "basics" do
|
describe "basics" do
|
||||||
it "store and get data" do
|
it "store and get data" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -21,7 +21,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "rewrite already stored data" do
|
it "rewrite already stored data" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
ship = Ship.all_ships[0]
|
ship = Ship.all_ships[0]
|
||||||
|
|
||||||
key = db << ship
|
key = db << ship
|
||||||
@ -35,7 +35,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly remove data" do
|
it "properly remove data" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -58,12 +58,12 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "preserves data on reopening" do
|
it "preserves data on reopening" do
|
||||||
db1 = DODB::SpecDataBase(Ship).new
|
db1 = SPECDB::Uncached(Ship).new
|
||||||
db1 << Ship.kisaragi
|
db1 << Ship.kisaragi
|
||||||
|
|
||||||
db1.to_a.size.should eq(1)
|
db1.to_a.size.should eq(1)
|
||||||
|
|
||||||
db2 = DODB::SpecDataBase(Ship).new remove_previous_data: false
|
db2 = SPECDB::Uncached(Ship).new remove_previous_data: false
|
||||||
db2 << Ship.mutsuki
|
db2 << Ship.mutsuki
|
||||||
|
|
||||||
db1.to_a.size.should eq(2)
|
db1.to_a.size.should eq(2)
|
||||||
@ -73,7 +73,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "iterates in normal and reversed order" do
|
it "iterates in normal and reversed order" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -95,7 +95,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "respects the provided offsets if any" do
|
it "respects the provided offsets if any" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -115,7 +115,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
|
|
||||||
describe "indices" do
|
describe "indices" do
|
||||||
it "do basic indexing" do
|
it "do basic indexing" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "raise on index overload" do
|
it "raise on index overload" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly deindex" do
|
it "properly deindex" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly reindex" do
|
it "properly reindex" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly updates" do
|
it "properly updates" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
|
|
||||||
describe "partitions" do
|
describe "partitions" do
|
||||||
it "do basic partitioning" do
|
it "do basic partitioning" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_class = db.new_partition "class", &.klass
|
db_ships_by_class = db.new_partition "class", &.klass
|
||||||
|
|
||||||
@ -241,7 +241,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "removes select elements from partitions" do
|
it "removes select elements from partitions" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_class = db.new_partition "class", &.klass
|
db_ships_by_class = db.new_partition "class", &.klass
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
|
|
||||||
describe "tags" do
|
describe "tags" do
|
||||||
it "do basic tagging" do
|
it "do basic tagging" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_tags = db.new_tags "tags", &.tags
|
db_ships_by_tags = db.new_tags "tags", &.tags
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly removes tags" do
|
it "properly removes tags" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_tags = db.new_tags "tags", &.tags
|
db_ships_by_tags = db.new_tags "tags", &.tags
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "gets items that have multiple tags" do
|
it "gets items that have multiple tags" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_tags = db.new_tags "tags", &.tags
|
db_ships_by_tags = db.new_tags "tags", &.tags
|
||||||
|
|
||||||
@ -335,7 +335,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
|
|
||||||
describe "atomic operations" do
|
describe "atomic operations" do
|
||||||
it "safe_get and safe_get?" do
|
it "safe_get and safe_get?" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
|
|
||||||
describe "tools" do
|
describe "tools" do
|
||||||
it "rebuilds indexes" do
|
it "rebuilds indexes" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
db_ships_by_class = db.new_partition "class", &.klass
|
db_ships_by_class = db.new_partition "class", &.klass
|
||||||
@ -380,7 +380,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "migrates properly" do
|
it "migrates properly" do
|
||||||
old_db = DODB::SpecDataBase(PrimitiveShip).new "-migration-origin"
|
old_db = SPECDB::Uncached(PrimitiveShip).new "-migration-origin"
|
||||||
|
|
||||||
old_ships_by_name = old_db.new_index "name", &.name
|
old_ships_by_name = old_db.new_index "name", &.name
|
||||||
old_ships_by_class = old_db.new_partition "class", &.class_name
|
old_ships_by_class = old_db.new_partition "class", &.class_name
|
||||||
@ -392,7 +392,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
# At this point, the “old” DB is filled. Now we need to convert
|
# At this point, the “old” DB is filled. Now we need to convert
|
||||||
# to the new DB.
|
# to the new DB.
|
||||||
|
|
||||||
new_db = DODB::SpecDataBase(Ship).new "-migration-target"
|
new_db = SPECDB::Uncached(Ship).new "-migration-target"
|
||||||
|
|
||||||
new_ships_by_name = new_db.new_index "name", &.name
|
new_ships_by_name = new_db.new_index "name", &.name
|
||||||
new_ships_by_class = new_db.new_partition "class", &.klass
|
new_ships_by_class = new_db.new_partition "class", &.klass
|
||||||
@ -432,7 +432,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
entries_per_fork = 100
|
entries_per_fork = 100
|
||||||
|
|
||||||
it "works for pushing values" do
|
it "works for pushing values" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
|
|
||||||
processes = [] of Process
|
processes = [] of Process
|
||||||
|
|
||||||
@ -454,7 +454,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "works for updating values" do
|
it "works for updating values" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
db_entries_by_name = db.new_index "name", &.name
|
db_entries_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
# First pass, creating data.
|
# First pass, creating data.
|
||||||
@ -494,7 +494,7 @@ describe "DODB::Storage::Basic" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does parallel-safe updates" do
|
it "does parallel-safe updates" do
|
||||||
db = DODB::SpecDataBase(Ship).new
|
db = SPECDB::Uncached(Ship).new
|
||||||
db_entries_by_name = db.new_index "name", &.name
|
db_entries_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
# We’ll be storing an integer in the "klass" field, and incrementing
|
# We’ll be storing an integer in the "klass" field, and incrementing
|
||||||
@ -528,7 +528,7 @@ end
|
|||||||
describe "DODB::Storage::Cached" do
|
describe "DODB::Storage::Cached" do
|
||||||
describe "basics" do
|
describe "basics" do
|
||||||
it "store and get data" do
|
it "store and get data" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -540,7 +540,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "rewrite already stored data" do
|
it "rewrite already stored data" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
ship = Ship.all_ships[0]
|
ship = Ship.all_ships[0]
|
||||||
|
|
||||||
key = db << ship
|
key = db << ship
|
||||||
@ -554,7 +554,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly remove data" do
|
it "properly remove data" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -577,12 +577,12 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "preserves data on reopening" do
|
it "preserves data on reopening" do
|
||||||
db1 = DODB::CachedSpecDataBase(Ship).new
|
db1 = SPECDB::Cached(Ship).new
|
||||||
db1 << Ship.kisaragi
|
db1 << Ship.kisaragi
|
||||||
|
|
||||||
db1.to_a.size.should eq(1)
|
db1.to_a.size.should eq(1)
|
||||||
|
|
||||||
db2 = DODB::CachedSpecDataBase(Ship).new remove_previous_data: false
|
db2 = SPECDB::Cached(Ship).new remove_previous_data: false
|
||||||
db2 << Ship.mutsuki
|
db2 << Ship.mutsuki
|
||||||
|
|
||||||
# Only difference with DODB::Storage::Basic: concurrent DB cannot coexists.
|
# Only difference with DODB::Storage::Basic: concurrent DB cannot coexists.
|
||||||
@ -593,7 +593,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "iterates in normal and reversed order" do
|
it "iterates in normal and reversed order" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -615,7 +615,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "respects the provided offsets if any" do
|
it "respects the provided offsets if any" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
Ship.all_ships.each do |ship|
|
Ship.all_ships.each do |ship|
|
||||||
db << ship
|
db << ship
|
||||||
@ -635,7 +635,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
|
|
||||||
describe "indices" do
|
describe "indices" do
|
||||||
it "do basic indexing" do
|
it "do basic indexing" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -651,7 +651,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "raise on index overload" do
|
it "raise on index overload" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -667,7 +667,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly deindex" do
|
it "properly deindex" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -687,7 +687,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly reindex" do
|
it "properly reindex" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -707,7 +707,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly updates" do
|
it "properly updates" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -731,7 +731,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
|
|
||||||
describe "partitions" do
|
describe "partitions" do
|
||||||
it "do basic partitioning" do
|
it "do basic partitioning" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_class = db.new_partition "class", &.klass
|
db_ships_by_class = db.new_partition "class", &.klass
|
||||||
|
|
||||||
@ -761,7 +761,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "removes select elements from partitions" do
|
it "removes select elements from partitions" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_class = db.new_partition "class", &.klass
|
db_ships_by_class = db.new_partition "class", &.klass
|
||||||
|
|
||||||
@ -783,7 +783,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
|
|
||||||
describe "tags" do
|
describe "tags" do
|
||||||
it "do basic tagging" do
|
it "do basic tagging" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_tags = db.new_tags "tags", &.tags
|
db_ships_by_tags = db.new_tags "tags", &.tags
|
||||||
|
|
||||||
@ -806,7 +806,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "properly removes tags" do
|
it "properly removes tags" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_tags = db.new_tags "tags", &.tags
|
db_ships_by_tags = db.new_tags "tags", &.tags
|
||||||
|
|
||||||
@ -833,7 +833,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "gets items that have multiple tags" do
|
it "gets items that have multiple tags" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_tags = db.new_tags "tags", &.tags
|
db_ships_by_tags = db.new_tags "tags", &.tags
|
||||||
|
|
||||||
@ -856,7 +856,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
|
|
||||||
describe "atomic operations" do
|
describe "atomic operations" do
|
||||||
it "safe_get and safe_get?" do
|
it "safe_get and safe_get?" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
|
|
||||||
@ -880,7 +880,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
|
|
||||||
describe "tools" do
|
describe "tools" do
|
||||||
it "rebuilds indexes" do
|
it "rebuilds indexes" do
|
||||||
db = DODB::CachedSpecDataBase(Ship).new
|
db = SPECDB::Cached(Ship).new
|
||||||
|
|
||||||
db_ships_by_name = db.new_index "name", &.name
|
db_ships_by_name = db.new_index "name", &.name
|
||||||
db_ships_by_class = db.new_partition "class", &.klass
|
db_ships_by_class = db.new_partition "class", &.klass
|
||||||
@ -901,7 +901,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "migrates properly" do
|
it "migrates properly" do
|
||||||
old_db = DODB::CachedSpecDataBase(PrimitiveShip).new "-migration-origin"
|
old_db = SPECDB::Cached(PrimitiveShip).new "-migration-origin"
|
||||||
|
|
||||||
old_ships_by_name = old_db.new_index "name", &.name
|
old_ships_by_name = old_db.new_index "name", &.name
|
||||||
old_ships_by_class = old_db.new_partition "class", &.class_name
|
old_ships_by_class = old_db.new_partition "class", &.class_name
|
||||||
@ -913,7 +913,7 @@ describe "DODB::Storage::Cached" do
|
|||||||
# At this point, the “old” DB is filled. Now we need to convert
|
# At this point, the “old” DB is filled. Now we need to convert
|
||||||
# to the new DB.
|
# to the new DB.
|
||||||
|
|
||||||
new_db = DODB::CachedSpecDataBase(Ship).new "-migration-target"
|
new_db = SPECDB::Cached(Ship).new "-migration-target"
|
||||||
|
|
||||||
new_ships_by_name = new_db.new_index "name", &.name
|
new_ships_by_name = new_db.new_index "name", &.name
|
||||||
new_ships_by_class = new_db.new_partition "class", &.klass
|
new_ships_by_class = new_db.new_partition "class", &.klass
|
||||||
|
@ -38,9 +38,16 @@ class DODB::Storage::Stacked(V) < DODB::Storage::Cached(V)
|
|||||||
property stack : FIFO(Int32)
|
property stack : FIFO(Int32)
|
||||||
|
|
||||||
# Initializes the `StackedDataBase` with a maximum number of entries in the cache.
|
# Initializes the `StackedDataBase` with a maximum number of entries in the cache.
|
||||||
def initialize(directory_name : String, @max_entries : Int32 = 100_000)
|
def initialize(@directory_name : String, max_entries : UInt32 = 100_000)
|
||||||
super directory_name
|
@stack = FIFO(Int32).new max_entries
|
||||||
@stack = FIFO(Int32).new @max_entries
|
Dir.mkdir_p data_path
|
||||||
|
Dir.mkdir_p locks_directory
|
||||||
|
|
||||||
|
begin
|
||||||
|
self.last_key
|
||||||
|
rescue
|
||||||
|
self.last_key = -1
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def [](key : Int32) : V
|
def [](key : Int32) : V
|
||||||
|
Loading…
Reference in New Issue
Block a user