спеціалізована СУБД для зберігання та обробки показань датчиків та лічильників
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Dima Gordenko fbb30f31e8 rc1 3 months ago
atree rc1 3 months ago
bin rc1 3 months ago
bufreader rc1 3 months ago
chunkenc rc1 3 months ago
client rc1 3 months ago
conbuf rc1 3 months ago
database rc1 3 months ago
enc rc1 3 months ago
examples rc1 3 months ago
freelist rc1 3 months ago
proto rc1 3 months ago
recovery rc1 3 months ago
timeutil rc1 3 months ago
txlog rc1 3 months ago
README.md rc1 3 months ago
database.ini rc1 3 months ago
database_linux rc1 3 months ago
database_windows rc1 3 months ago
diploma.go rc1 3 months ago
go.mod rc1 3 months ago
go.sum rc1 3 months ago
linux_build.sh rc1 3 months ago
loadtest.ini rc1 3 months ago
loadtest_linux rc1 3 months ago
loadtest_windows rc1 3 months ago
requests.ini rc1 3 months ago
requests_linux rc1 3 months ago
requests_windows rc1 3 months ago
windows_build.sh rc1 3 months ago

README.md

  1. Zip-архів із базою даних на 841 млн показань (791 МБ) можна скачати за посиланням https://drive.google.com/file/d/18oks6STkVpg4-TT2WyCIBBpCgRyF29L2

В архіві 5 файлів: 2.changes 2.snapshot test.data test.index metrics.info

Після розпаковки їх необхідно перемістити в директорію testdir.

  1. Якщо є бажання експериментувати з пустою базою даних, краще створити нову. Наприклад, назвемо її "x": створюємо директорію xdir, створюємо файл x.ini із такими налаштуваннями: tcpPort = 12345 dir = xdir redoDir = xdir databaseName = x

Запускаємо СУБД із термінала: ./database_linux -c x.ini

Всі операції виконуємо в кореневій директорії проєкту.

  1. Файли *.ini: database.ini - налаштування СУБД (database); loadtest.ini - налаштування навантажувального тесту (loadtest); requests.ini - налаштування прикладів запитів (requests).

  2. Скомпільоване ПО для Linux (64-бітна архітектура): database_linux - СУБД; loadtest_linux - навантажувального тест; requests_linux - приклади запитів.

  3. Скомпільоване ПО для Windows (64-бітна архітектура): database_windows - СУБД; loadtest_windows - навантажувального тест; requests_windows - приклади запитів.

  4. Директорія examples має три вкладені директорії із вихідними кодами: database - запуску СУБД; loadtest - навантажувального тесту; requests - різних типів запитів, що підтримуються СУБД.

  5. Якщо на комп'ютері встановлено компілятор Go, можна скомпілювати згадані вище програми за допомогою bash-скриптів:

./linux_build.sh ./windows_build.sh

Скомпільовані версії програм опиняться в кореневій директорії проєкту.

  1. Файли з даними розміщуються в директорії datadir. В базі даних вже записано 841 млн. показань. Сумарний розмір трохи більше 1.3 GB.

  2. Налаштування навантажувального тесту можна змінити, відредагувавши файл loadtest.ini. Опція connections - це кількість одночасно відкритих підключень до СУБД. Опція requestsPerConn - це кількість запитів, які відправляє потік через одне відкрите підключення.

Звіт виглядає наступним чином:

TEST RESULTS: Time: 2 seconds Connections: 100 Requests per conn: 500 Total requests: 50000 AVG request time: 3.121022ms RPS: 26891

listCumulativeMeasures: 3099 (6.2%), AVG request time: 3.785916ms listCumulativePeriods: 12055 (24.1%), AVG request time: 2.726391ms listInstantMeasures: 1974 (3.9%), AVG request time: 6.726605ms listInstantPeriods: 7710 (15.4%), AVG request time: 2.9808ms listCurrentValues: 25162 (50.3%), AVG request time: 2.988301ms

last day: 20382 (82.1%), AVG request time: 2.954718ms last week: 2993 (12.1%), AVG request time: 4.050662ms last month: 708 (2.9%), AVG request time: 8.248486ms random time range: 755 (3.0%), AVG request time: 3.540239ms

Навантажувальний тест відправляє випадкові запити до випадкових метрик. Оскільки на реальному проєкті запити та часові діапазони мають різну ймовірність - я реалізував це в навантажувальному тесті.

Приклад 1: listCurrentValues: 25162 (50.3%) , AVG request time: 2.988301ms означає що відправлено 25162 запитів listCurrentValues, що склало 50.3% від загальної кількості запитів. Середній час виконання (Latency) запитів listCurrentValues склав 2.99 міллісекунди.

Приклад 2: last month: 708 (2.9%), AVG request time: 8.248486ms означає що відправлено 708 запитів на отримання даних за останній місяць, що склало 2.9% від загальної кількості. Середній час виконання (Latency) таких запитів склав 8.25 міллісекунди. Часовий діапазон задається для всіх запитів окрім listCurrentValues.

  1. Запуск навантажувального тесту: Виконуємо пункт 1.

Запускаємо СУБД із термінала: ./database_linux

Запускаємо тест із іншого термінала: ./loadtest_linux

Чекаємо завершення. Звіт буде надруковано у терміналі після завершення тесту.

Команди для Windows: ./database_windows ./loadtest_windows

  1. Запуск прикладів запитів: Можна запускати на пустій базі даних (без скачування Zip-архіва із показаннями).

Запускаємо СУБД із термінала: ./database_linux

Запускаємо тест із іншого термінала: ./requests_linux

Результат виконання запитів друкується у терміналі.

Команди для Windows: ./database_windows ./requests_windows

  1. Подивитись HELP: ./database_linux -h ./loadtest_linux -h ./requests_linux -h

  2. Зупинити СУБД, перервати навантажувальний тест: Ctrl + C