1 Востаннє редагувалося Smolenkov_BN (03.11.2017 12:41:16)

Тема: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Підвищення швидкодії CMS шляхом розділення даних між DB і DF

В процесі професійної діяльності через мої руки пройшло більше 1000 безкоштовних CMS різного виконання і призначення. На перший погляд багато хто з них має порівняно високу швидкодію і функціональність. Але кожна моя спроба використати їх для професійного видання об'ємних документів тут же виявляла дуже істотні недоліки. Практично усі тестовані CMS мали два істотні недоліки, пов'язані з процесом редагування і зберігання публікованих матеріалів:
1) редагуванню піддається не одна сторінка, а відразу увесь документ, тому правка багатосторінкового документу перетворюється на справжній кошмар;
2) поступове заповнення документами сайту реально знижує швидкодію CMS, а наявність на сайті десятків тисяч документів взагалі робить її застосування неефективним.
Іншими словами, замість "надійного інструменту" для повсякденної роботи публіцист отримує "безкоштовну іграшку", яка ламається при першій же спробі серйозно пограти з нею.
Який реальний доход може принести CMS класу "безкоштовна іграшка"? Чесно кажучи, мені щиро шкода розробників подібних CMS, що згаяли свій творчий час на втілення сумнівної ідеї.
Чи можна обійти ці недоліки? Так, можна!
Відповідь заснована на особистому досвіді створення інформаційних систем Інтранет з великим об'ємом даних:
правильно розділити усю корисну інформацію між базою даних (DB) і файлами даних (DF)!
Усім відомо, що системи управління папками і файлами (FFMS) з'явилися значно раніше за системи управління базами даних (DBMS), тому FFMS є розвиненішими відносно DBMS. Проте не усі дані є зручними для зберігання в DF. Про це можна запитати у розробників програм на COBOL і FORTRAN, які успішно використовуються досі.
Тому я провів наступний експеримент.
На комп'ютері з OS MS Windows XP (MSWNT) було встановлено DBMS MS Visual Foxpro (MSVFP). Засобами оболонки MSVFP в DB було створено типову таблицю docs для зберігання документів з полями:
- code (код з "Державного рубрикатора науково-технічної інформації");
- author (прізвище, ім'я і по батькові автора);
- name (назва документу);
- identifier (внутрішній ідентифікатор);
- city (місто видання);
- country (країна видання);
- pubhouse (назва видавництва);
- year (рік видання);
- pages (кількість сторінок);
- illustrations (кількість ілюстрацій);
- isbn (код ISBN);
- annotation (анотація до документу);
- text (текст документу).
Усі поля, окрім "text", були оголошені ключами індексування.
Засобами оболонки MSVFP я зробив 2 програми:
1) електронна бібліотека;
2) емулятор дій оператора.
У складі програми електронної бібліотеки були 2 процедури запису тексту:
1) цілком в полі text;
2) посторінковий у форматі
docs\{code}\{identifier}\{номер сторінки}.txt
Критерій припинення виклику кожної процедури - 10000 записів в таблиці DB.
Емулятор оператора щохвилини заносив в логфайл кількість записів в таблиці і час виконання процедури.
Спочатку емулятор відпрацював з першою процедурою, а потім з другою процедурою.
Отримані дані перевершили усі очікування.
У першу хвилину час виконання першої процедури був приблизно в 1,4 разу менше часу виконання другої. Проте в останню хвилину час виконання першої процедури був приблизно в 17 разів більше часу виконання другої. Крім того, безумовна перевага зберігання окремої сторінки тексту в окремому файлі відчувається при виведенні документу на дисплей.
Мови програмування MSVFP (з урахуванням SOAP) і PHP (з урахуванням OOP) мають багато спільного, що дозволило мені легко перейти на PHP для виправлення помилок і коригування кодів в CMS.
Звідси можна зробити сміливий висновок:
безкоштовна CMS з алгоритмом розділення даних між DB і DF зможе зайняти гідну нішу у сфері систем управління контентом сайтів і приносити регулярні дивиденты розробникові з платних хостингів.

Подякували: 0xDADA11C7, ping, /KIT\, leofun014

2

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Smolenkov_BN написав:

Усім відомо, що системи управління папками і файлами (FFMS) з'явилися значно раніше за системи управління базами даних (DBMS), тому FFMS є розвиненішими відносно DBMS.

WTF?

3

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

varkon написав:
Smolenkov_BN написав:

Усім відомо, що системи управління папками і файлами (FFMS) з'явилися значно раніше за системи управління базами даних (DBMS), тому FFMS є розвиненішими відносно DBMS.

WTF?

дядько вже на пенсію вийшов, так що все окей

Подякували: varkon1

4

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

> WTF?
> дядько вже на пенсію вийшов, так що все окей

Мабуть ви народилися надто пізно, а вивченням історії електронних обчислювальних машин явно нехтували. Тоді ексклюзивно для вас приведу чотири історичні факти.
Факт №1: перше сховище файлів було створене в 1950 році.
Факт №2: перша операційна система GM-НАА була створена в 1955 році.
Факт №3: перша ЕОМ 305 RAMAC фірми IBM з накопичувачем на жорстких дисках була випущена в 1956 році.
Факт №4: перша система управління базами даних IMS фірми IBM з ієрархічною моделлю побудови була випущена в 1968 році.
Різниця в часі між появою системи управління файлами і системи управління даними складає 13 років. Це величезний термін в епосі розвитку комп'ютерів.
А в подарунок прийміть древню пораду Ханумана:
- Тільки нові знання можуть суперечити старій мудрості.
Ще є питання по суті ідеї?

Подякували: 0xDADA11C71

5

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Стосовно історії розвитку комп'ютерів ви повністю праві, але твердження

FFMS є розвиненішими відносно DBMS.

є спірним, так само як твердження про більшу розвиненість кам'яних сокир в порівнянні з залізними. Прошу уточнити що саме ви мали на увазі під розвитком.

Подякували: koala, varkon, leofun013

6 Востаннє редагувалося koala (03.11.2017 23:51:13)

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Без уточнення конкретних версій СУБД, файлової системи і точних налаштувань (розмір та час збереження кешу, кількість файлових дескрипторів і т.д.) взагалі неможливо нічого певного казати. Цілком можливо, що FAT32 на Windows XP SP2 під 256МБ оперативної пам'яті дійсно виграє у якоїсь версії MSVFP. Але стосовно, скажімо, Ext4 на Ubuntu 16.04 з 8ГБ проти MariaDB 10.1 це може бути зовсім не так.
Знову ж таки, суттєве значення має навантаження - якщо запити рівномірні розподілені, результат може значно відрізнятися від реального навантаження, з популярними і непопулярними запитами.

7

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

FakiNyan написав:
varkon написав:
Smolenkov_BN написав:

Усім відомо, що системи управління папками і файлами (FFMS) з'явилися значно раніше за системи управління базами даних (DBMS), тому FFMS є розвиненішими відносно DBMS.

WTF?

дядько вже на пенсію вийшов, так що все окей

Дядько гарна ілюстрація до журналу "Типовий радянський інженер" а конкретно до статті - "Знає багато фактів але не здатен ні до чого".
На жаль.

8

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Дядько гарна ілюстрація до журналу "Типовий радянський інженер" а конкретно до статті - "Знає багато фактів але не здатен ні до чого".
На жаль.

Вважаю дядьку особливою формою життя, яка може багато корисного розповісти. Так, зараз він схожий на марсіянина, який працював на Коболі і був заморожений для підримання успадкованого коду в майбутньому, десь як в хвільмі руйнівник зі Сталоне.

9 Востаннє редагувалося Smolenkov_BN (04.11.2017 23:02:08)

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

> 0xDADA11C7:
> Стосовно історії розвитку комп'ютерів ви повністю праві, але твердження
>> FFMS є розвиненішими відносно DBMS.
> є спірним, так само як твердження про більшу розвиненість кам'яних сокир в порівнянні з залізними. Прошу уточнити що саме ви мали на увазі під розвитком.

0xDADA11C7, Ваше прагнення до нових знань викликає похвалу, а прагнення змагатися в знаннях - повагу. Обожнюю сильних супротивників. Для таких як Ви мені нічого не жаль. Тому продовжу, хоча це не в тему. Я поясню прямо на пальцях Вашої руки. Починайте загинати по кожному пункту. Так легше запам'ятати.
1. Система управління папками (контейнерами) і файлами (Folders and Files Management System - FFMS) є складовою частиною операційної системи (Operating System - OS). Система управління базами даних (DataBases Management System - DBMS) не є складовою частиною OS, а є стороннім застосуванням.
2. FFMS не цікавить корисний вміст файлів (корисний вміст обробляють інші застосування). DBMS обробляє корисний вміст файлів.
3. DBMS використовує FFMS для відкриття, запису і читання файлів. Отже, швидкодія DBMS безпосередньо залежить від швидкодії FFMS.
4. Пряме (без обробки вмісту) відкриття, запис і читання файлу за допомогою функцій PHP проходить набагато швидше за ті ж операції через DBMS.
5. Розвиток FFMS йде набагато швидшими темпами, ніж розвиток DBMS. Найпростіший доказ: порівняти за однаковий період кількість версій OS і кількість версій DBMS, що розвиваються.
П'ять моїх пунктів і п'ять загнутих пальців Вашої руки.

> koala:
> Без уточнення конкретних версій СУБД, файлової системи і точних налаштувань (розмір та час збереження кешу, кількість файлових дескрипторів і т.д.) взагалі неможливо нічого певного казати.
> Але стосовно, скажімо, Ext4 на Ubuntu 16.04 з 8ГБ проти MariaDB 10.1 це може бути зовсім не так.
> Знову ж таки, суттєве значення має навантаження - якщо запити рівномірні розподілені, результат може значно відрізнятися від реального навантаження, з популярними і непопулярними запитами.

Співвідношення (кількість разів) в швидкодії двох процедур не залежить від конкретних версій СУБД, файлової системи і точних налаштувань (розмір та час збереження кешу, кількість файлових дескрипторів і т.д.), тому що обидві процедури функціонують в однакових умовах.

> koala:
> Цілком можливо, що FAT32 на Windows XP SP2 під 256МБ оперативної пам'яті дійсно виграє у якоїсь версії MSVFP.

А Ви оригінал і пустун, тому що використали FAT32 под Windows XP. Цим гумором Ви мене добре насмішили...

> varkon:
> На жаль. Дядько гарна ілюстрація до журналу "Типовий радянський інженер"...

Так, я інженер і горджуся цим! Навіть на вступних іспитах в інститут писав твір на тему "Чому я хочу бути інженером?". Але ніколи не був "радянським", тому що я в рядах КПРС не перебував! Попрошу не ображати моє звання "інженер" прикметником "радянський". Не я один на цьому форумі народився в СРСР. Але це не привід носити "совдепівське клеймо". Форум програмістів має бути поза політикою, а політиканів на форумі слід нещадно банити. Інакше влада просто закриє цей форум щоб уникнути загострення політичних пристрастей в Україні.

> varkon:
> ... а конкретно до статті - "Знає багато фактів але не здатен ні до чого".
> На жаль.

Не хвилюйтеся, на черговій переатестації рівня кваліфікації програміста Ваше спілкування зі мною матиме позитивну оцінку.

> 0xDADA11C7:
> Вважаю дядьку особливою формою життя, яка може багато корисного розповісти.
> Так, зараз він схожий на марсіянина, який працював на Коболі і був заморожений для підримання успадкованого коду в майбутньому, десь як в хвільмі руйнівник зі Сталоне.

Дійсно, у нас з Вами є невелика відмінність. Ви ходите в Інтернет за новими знаннями, я - за підтвердженням своїх, а в іншому ми практично однакові...

Подякували: NaharD, 0xDADA11C7, leofun013

10

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Smolenkov_BN написав:

Співвідношення (кількість разів) в швидкодії двох процедур не залежить від конкретних версій СУБД, файлової системи і точних налаштувань (розмір та час збереження кешу, кількість файлових дескрипторів і т.д.), тому що обидві процедури функціонують в однакових умовах.

Серйозно? Скільки у вас років досвіду, кажете? Елементарний приклад: процедура A працює швидше за процедуру B, але потребує більше оперативної пам'яті. Поки пам'яті обом процедурам вистачає - A безумовний переможець. Але якщо A не вистачить пам'яті, вона починає використовувати своп, і час її роботи збільшується в сотні разів. Хоча умови однакові.

Подякували: leofun011

11 Востаннє редагувалося VTrim (05.11.2017 00:17:32)

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

> 4. Пряме (без обробки вмісту) відкриття, запис і читання файлу за допомогою функцій PHP проходить набагато швидше за ті ж операції через DBMS.

База даних використовує файлову систему і простий запис/зчитування дійсно швидший прямо з PHP. Але коли дійде справа до найпростішої кастомної вибірки/обробки - такий спосіб одразу ж програє в продуктивності, швидкості. Не кажучи вже про складні вибірки та великі об'єми даних.
Тут навіть десь є тема, де проводили тести.

Подякували: leofun011

12

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

>  Дійсно, у нас з Вами є невелика відмінність. Ви ходите в Інтернет за новими знаннями, я - за підтвердженням своїх, а в іншому ми практично однакові...

Ви не повірите, але краще б ви приходили за новими знаннями.

Подякували: varkon1

13

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Я митець, я так бачу:

1. Система управління папками (контейнерами) і файлами (Folders and Files Management System - FFMS) є складовою частиною операційної системи (Operating System - OS). Система управління базами даних (DataBases Management System - DBMS) не є складовою частиною OS, а є стороннім застосуванням.

Це з якого боку поглянути, якщо з TR-DOS для ZX Spectrum чи MS DOS для IBM PC, то сучасні файлові системи увібрали в себе багато хвункцій баз даних:

  • журналювання

  • альтернативні потоки даних (наприклад сучасні авдивоплеєри не зберігають відомості про оцінку користувачем композиції в центральній "базі даних", а замість цього ставлять позначку в альтернативному потоці файлу, те саме робить вінда зі всіма завантаженими з інтернета файлами -- ставить позначку про небезпеку всього що прийшло з мережі, аби при відкритті файлу увідомити користувача про небезпеку)

  • символьні посилання

2. FFMS не цікавить корисний вміст файлів (корисний вміст обробляють інші застосування). DBMS обробляє корисний вміст файлів.

Спірне трвердження, сучасні СКБД так само надають застосункам програмні інтерфейси для обробки даних всередині неї, як і файлові системи.

3. DBMS використовує FFMS для відкриття, запису і читання файлів. Отже, швидкодія DBMS безпосередньо залежить від швидкодії FFMS.

Ні, як розробник дрібненької бази даних мушу зауважити що так було за часів спектруму чи MS DOS з Clipper`ом і dBase на однопроцесорній машині і то не завжди. Дивіться, спочатку потрібне зчитування збереженого стану з файлової системи, в цьому місці відбувається пряма залежність швидкодії від файлової системи, а далі обробка даних йде окремим потоком, а зберігання транзакцій чи просто станів -- окремим, звісно для збереження стану треба призупинити надавання застосунку програмного інтерфейсу для створення блобу, який має зберегти файлова система. Навіть якщо система однопроцесорна, то робота з файловою системою цілком може бути асинхронною, дав завдання на зберігання даних і працюй далі, а коли ФС виконає свою роботу (це забезпечують переривання, буфер жорсткого диску, різні залізячні контролери, DMA), то зробить виклик процедури яку ти передав. Я розумію, чому ви так вважаєте -- бо такого в МС ДОС і більш ранніх системах не було.

4. Пряме (без обробки вмісту) відкриття, запис і читання файлу за допомогою функцій PHP проходить набагато швидше за ті ж операції через DBMS.

Спірне питання насправді, дивіться попередінй пункт. Я так кажу через те, що ці обидва способи керування даними застосовують бухверізацію, себто фізично ФС чи БД за допомого ФС нічого не записують одразу, а лише коли прийде час (наприклад, кожні 5 хвилин) чи коли назбирається потрібна кількість даних, аби зазря не ганяти жорсткий диск. Звісно буферизацію можна вимикати для окремих файлів(можна і для всієї ФС), або надсилати команду ФС звільнити буфери, але це суттєво знизить загальну швидкодії комп'ютера. Все залежить від налаштувань системи, а тим більше запит до локальної ФС куди швидший, ніж до віддаленої БД. Навіть стандартна бібліотека мови С для лінукса застосовує буферизацію для виводу в консолю, аби зайвого разу не смикати ядро системи (смикати преривання дороге задоволення в плані швидкодії).

5. Розвиток FFMS йде набагато швидшими темпами, ніж розвиток DBMS. Найпростіший доказ: порівняти за однаковий період кількість версій OS і кількість версій DBMS, що розвиваються.

Не показник -- більшість ОС користуються однаковими файловими системами чи надзвичайно подібними, часто в них змінюють шпалери і випускають свою "ОС", я вже не кажу про те що великий кусень ринку займає пропієтарна ОС, яка має надзвичайно непродуману архутектуру.

Порівняння БД з ФС це боротьба слона з китом, тим більше, що вже важко розгледіти де там хто.

Подякували: leofun011

14

Re: Підвищення швидкодії CMS шляхом розділення даних між DB і DF

Smolenkov_BN написав:

Так, я інженер і горджуся цим! Навіть на вступних іспитах в інститут писав твір на тему "Чому я хочу бути інженером?". Але ніколи не був "радянським", тому що я в рядах КПРС не перебував! Попрошу не ображати моє звання "інженер" прикметником "радянський". Не я один на цьому форумі народився в СРСР.

Насправді радянським інженером людину робить не факт участі\не участі у кпрс або народження у цій країні (тим більше що радянські інженери- вони дуже схожі на морских свинок, які не мають відношення ні до свиней, ні до моря) а характерний тип мислення, який характерезується нічим не підтверженим апломбом та невід'ємним бажанням впихнути весь світ в забитий в голові шаблон (це процес який у радянських називається "мішлением"). Я можу звичайно ж помилятися та сприймати вас хибно. Errare humanum est. Звичайно ж. Але тільки радянський може з гордістью заявити - "ознайомився з можливостями більше 1000 CMS". Люба нормальна людина запитає - "Навіщо? Який в цьому сенс?" Кого ви цим хотіли здивувати? Ви написали найкращу? Винайшли фейсбук? Створили щось? Ви напхали собі в голову купу безглуздих фактів й тепер з апломбом їх розносите. Я розумію - вік дає свої проблеми та хвороби - але це не відміняє необхідності відноситися критично до своїх знань та вподобань.

Smolenkov_BN написав:

Не хвилюйтеся, на черговій переатестації рівня кваліфікації програміста Ваше спілкування зі мною матиме позитивну оцінку.

Ви коли збираєтесь бухати - розбирайте клавіатуру. :) Чесно. Ті хто з цим має проблеми - кажуть допомагає.