-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create a load testing command #135
Comments
Thank you for creating proposal of great feature. I think other command have followed the format like |
I have some ideas regarding scenario base benchmarking. I suppose it will be invoked by |
I mention the YCSB command style as an option. I think it will be |
I think we need to provide some command like show result of load testing. all in oneThe idea is that we can run simple test and scenario base test within one command. If we specify the test file to run scenario base, I can imagine kind of command as follows. It is just simple interface.
split commandThe idea is that we provide two command
|
I personally find the In my opinion, using the term Additionally, I would like to propose the following commands: # Perform a simple test
$ dy bench run --rcu 100 --wcu 5
# Conduct a scenario-based test (not implemented in the initial phase)
$ dy bench run -s <scenario-file>
# Generate a report for the load test (not implemented in the initial phase)
$ dy bench report <report-file> Please let me know what you think about these suggestions and proposed commands. |
I agree with you. The idea that using |
Based on the internal discussion with Solution Architect, the following features are preferable.
He want similar functionality as what the following project provides. |
Load testing command
Background
The load testing command is useful in understanding DynamoDB behaviors, for example, throttling, auto-scaling, metrics, etc. Also, it helps users to investigate an application's behavior when throttling happens.
Proposed design
The decisions in the implementations are the followings;
Interface
At first implementation, load testing functionality is provided with the command,
dy bench run
ordy benchmark run
and provided options are the following;--rcu <number>
: Specify target RCU when reading items. This is a required argument.--wcu <number>
: Specify target WCU when writing items. This is a required argument if you do not provide--skip-item-createion
.--size <number>
: The preferred size of an attribute in bytes. The default value is500
.--skip-item-creation
: By default, dynein creates items first for the writing test, and then, performs the read tests by using created items. This option skips wcu testing and uses the data stored on the table.--partition-key-variations <number>
: The maximum number of primary key variations of items. The default value is1000
.--sort-key-variations <number>
: The maximum number of sort key variations of items. The default value is100
.--duration-write <number>
: The duration of the write testing. The default value is five minutes.--duration-read <number>
: The duration of the read testing. The default value is five minutes.Common options like
--table
,--region
, etc are considered as well as other commands.We use a
bench run
subcommand for initial implementation. Please note that we have room of feature enhancements. For example, we can usedy bench run -s <scenario-file>
for scenario based tests anddy bench report <report-file>
for showing a result of a test.The workflow
The workflow of the load testing is schematically described as the followings;
--item-variations
argument, create a list of primary keys to use in the test. In the case in which--skip-item-creation
is provided,Scan
APIs are invoked to list primary keys. We must use parallel scans because sequential scans create a hot partition.--wcu
argument,PutItem
are invoked with the primary keys created by the first step for the duration of--duration-write
. An item created has an additional string attribute with--size
bytes.--rcu
argument,GetItem
are invoked with the primary keys created by the first step for the duration of--duration-read
.The text was updated successfully, but these errors were encountered: