Last active
May 9, 2023 04:00
-
-
Save nickva/84aa296c7815a815116f61be43acbfef to your computer and use it in GitHub Desktop.
Silly CouchDB fabric benchmark
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-module(fbench). | |
% fbench:bench(). | |
% * created db fbench-1683604564287312344 [{q,64},{n,3}] in 17869 usec | |
% * put 200 docs with 2823 usec per op | |
% * get doc 20000X with 1157 usec per op | |
% * get security 20000X with 225 usec per op | |
% ok | |
-export([ | |
bench/0, | |
bench/3, | |
create_db/2, | |
delete_db/1, | |
delete_old/0, | |
put_doc/2, | |
get_doc/2, | |
get_security/1 | |
]). | |
-define(PREFIX, "fbench-"). | |
bench() -> | |
bench([{q,64}, {n,3}], 200, 20000). | |
bench(DbOpts, DocCount, N) -> | |
ok = delete_old_dbs(), | |
Db = db_name(), | |
create_db(Db, DbOpts), | |
T1 = ts(), | |
put_docs(Db, DocCount), | |
T2 = ts(), | |
PerDoc = round((T2 - T1) / DocCount), | |
io:format(" * put ~p docs with ~p usec per op~n", [DocCount, PerDoc]), | |
get_docs(Db, DocCount, N), | |
T3 = ts(), | |
PerRead = round(((T3 - T2) / N)), | |
io:format(" * get doc ~pX with ~p usec per op~n", [N, PerRead]), | |
get_security(Db, N), | |
T4 = ts(), | |
PerSecurity = round(((T4 - T3) / N)), | |
io:format(" * get security ~pX with ~p usec per op~n", [N, PerSecurity]), | |
ok. | |
delete_old() -> | |
{ok, Dbs} = fabric:all_dbs(), | |
[delete_db(Db) || Db <- Dbs, string:prefix(Db, ?PREFIX) =/= nomatch], | |
ok. | |
delete_old_dbs() -> | |
{ok, Dbs} = fabric:all_dbs(), | |
[delete_db(Db) || Db <- Dbs, string:prefix(Db, ?PREFIX) =/= nomatch], | |
ok. | |
db_name() -> | |
Suffix = integer_to_binary(os:system_time()), | |
<<?PREFIX, Suffix/binary>>. | |
create_db(Db, Opts) -> | |
T0 = ts(), | |
ok = fabric:create_db(Db, Opts), | |
T1 = ts(), | |
io:format(" * created db ~s ~p in ~p usec ~n", [Db, Opts, T1 - T0]), | |
ok. | |
delete_db(Db) -> | |
io:format(" * deleting db ~s~n", [Db]), | |
ok = fabric:delete_db(Db). | |
put_doc(Db, DocId) when is_integer(DocId) -> | |
DocIdBin = integer_to_binary(DocId), | |
{ok, _} = fabric:update_doc(Db, doc(DocIdBin), []), | |
ok. | |
put_docs(_, 0) -> | |
ok; | |
put_docs(Db, DocId) -> | |
ok = put_doc(Db, DocId), | |
put_docs(Db, DocId - 1). | |
get_doc(Db, DocId) -> | |
DocIdBin = integer_to_binary(DocId), | |
case fabric:open_doc(Db, DocIdBin, []) of | |
{ok, _} -> ok; | |
{not_found, missing} -> not_found | |
end. | |
get_docs(_, _, 0) -> | |
ok; | |
get_docs(Db, DocCount, N) -> | |
ok = get_doc(Db, rand:uniform(DocCount)), | |
get_docs(Db, DocCount, N - 1). | |
get_security(Db) -> | |
fabric:get_security(Db). | |
get_security(_, 0) -> | |
ok; | |
get_security(Db, N) -> | |
{_} = get_security(Db), | |
get_security(Db, N - 1). | |
ts() -> | |
erlang:monotonic_time(microsecond). | |
doc(DocId) -> | |
{[ | |
{<<"_id">>, DocId}, | |
{<<"random_val">>,749382603}, | |
{<<"worker_id">>,72}, | |
{<<"foo">>,<<"1209809812904880912">>}, | |
{<<"bar">>,<<"asdfasdf">>}, | |
{<<"baz">>,<<"eeefffwww">>}, | |
{<<"blah">>,<<"lkqjwelkrjlqwejkrklqwjeklrjkl lkjasdflk jaslkdfj ">>}, | |
{<<"blob">>, | |
<<"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ultricies et ligula a luctus. Morbi in enim eu enim lacinia tincidunt sed vitae mi. Donec ut massa vel elit pulvinar placerat ut sit amet arcu. Nullam tristique condimentum enim, vitae faucibus ligula ultricies quis. Vivamus volutpat feugiat vestibulum. Cras porttitor est purus. Donec massa nibh, aliquam sit amet ornare ac, maximus at felis. Fusce bibendum est a nisi sodales, at efficitur nunc finibus. Nullam non sem maximus, dapibus massa ut, tempor ante. Aliquam erat volutpat. Fusce eget efficitur diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ultricies et ligula a luctus. Morbi in enim eu enim lacinia tincidunt sed vitae mi. Donec ut massa vel elit pulvinar placerat ut sit amet arcu. Nullam tristique condimentum enim, vitae faucibus ligula ultricies quis. Vivamus volutpat feugiat vestibulum. Cras porttitor est purus. Donec massa nibh, aliquam sit amet ornare ac, maximus at felis. Fusce bibendum est a nisi sodales, at efficitur nunc finibus. Nullam non sem maximus, dapibus massa ut, tempor ante. Aliquam erat volutpat. Fusce eget efficitur diam.">>}, | |
{<<"num1">>,<<"123555123">>}, | |
{<<"num2">>,<<"90812091289054">>}, | |
{<<"biz">>,<<",zmxncv lkjaf qwerlkj">>}, | |
{<<"zab">>,<<"zooooooob">>}, | |
{<<"mtime">>,<<"1453234712345">>}, | |
{<<"ctime">>,<<"1453234712345">>}, | |
{<<"bool">>,false} | |
]}. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment