rox/bench/rox_bench.exs

50 lines
1.2 KiB
Elixir

defmodule RoxBench do
use Benchfella
@sample_record %{name: "Bob", age: 38, favorite_color: "Blue", gender: :male, is_likeable: false, pets: [%{name: "Woof", species: :dog}]}
setup_all do
:ok =
Application.ensure_started(:faker)
{:ok, db, cfs} =
Rox.open("./bench.rocksdb", [create_if_missing: true, auto_create_column_families: true], ["a", "b", "c"])
{:ok, %{db: db, cfs: cfs, default_cf: cfs["a"]}}
end
teardown_all _ do
File.rm_rf!("./bench.rocksdb")
end
bench "random_writes" do
Rox.put(bench_context.default_cf, random_key(), random_record())
end
defp random_key() do
:crypto.rand_uniform(1, 10_000_000)
|> Integer.to_string()
end
defp random_record() do
num_pets =
:crypto.rand_uniform(0, 3)
%{
name: Faker.Name.name(),
age: :crypto.rand_uniform(20, 50),
favorite_color: Faker.Color.name(),
description: Faker.Lorem.words(10),
profile_url: Faker.Internet.image_url(),
pets: Enum.map(0..num_pets, fn _ -> random_pet() end)
}
end
defp random_pet() do
%{
name: Faker.Name.first_name(),
age: :crypto.rand_uniform(1, 7),
}
end
end