mirror of https://github.com/poanetwork/rox.git
50 lines
1.2 KiB
Elixir
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
|