Здається, що ви прийняли фактично правильне, короткострокове технічне рішення щодо зберігання даних для своєї заявки - ви вирішили написати спеціальний інструмент управління сховищем даних.
Ви сидите на континуумі з варіантами руху в будь-якому напрямку.
У довгостроковій перспективі ви, ймовірно, (майже, але не на 100%, безумовно) опинитесь у проблемах, і, можливо, буде краще перейти до використання існуючих рішень для зберігання даних. Існують конкретні, дуже поширені, передбачувані проблеми з роботою, з якими ви будете змушені мати справу, і вам краще використовувати наявні інструменти, а не прокручувати власні.
Це здається, що ви написали (невелику) базу даних для власного призначення, вбудовану в та безпосередньо використану вашою програмою. Я припускаю, що ви покладаєтесь на ОС та файлову систему, щоб керувати фактичним записом та читанням диска та трактувати комбінацію як сховище даних.
Коли робити те, що ти зробив
Ви сидите в солодкому місці для зберігання даних. Зберігання даних ОС та файлової системи неймовірно зручно, доступно та переноситься між платформами. Комбінація існує так довго, що ви впевнені, що будете підтримані та запущені програми майже на будь-якій стандартній конфігурації розгортання.
Це також просте поєднання для написання коду - API досить простий і базовий, і для його роботи потрібно відносно мало рядків коду.
Як правило, ідеально робити те, що ви робили, коли:
- Прототипування нових ідей
- Створення додатків, які навряд чи потребуватимуть масштабування, не залежать від продуктивності
- Обмежений незвичними обставинами, такими як відсутність ресурсів для встановлення бази даних
Альтернативи
Ви перебуваєте в континуумі варіантів, і ви можете дістати звідси два "напрямки", які я вважаю "вниз" і "вгору":
Вниз
Це найменш вірогідний варіант застосувати, але він є тут для повноти:
Ви можете, якщо хочете, спуститися вниз , тобто взагалі обійти ОС і файлову систему і по-справжньому записувати і читати безпосередньо з диска. Цей вибір, як правило, актуальний лише у випадках, коли потрібна надзвичайна ефективність - подумайте, наприклад, про мінімальний / крихітний пристрій MP3- плеєра, без достатньої кількості оперативної пам’яті для повністю функціональної ОС або про щось на кшталт машини , що вимагає неймовірно ефективної маси операції запису даних (більшість сховищ даних торгують повільніше записом для швидшого читання, оскільки це набагато частіший випадок використання майже для всіх програм).
Вгору
Тут є кілька підкатегорій - однак вони не зовсім ексклюзивні. Деякі інструменти охоплюють обидва, забезпечуючи певну функціональність у кожному, деякі можуть повністю переходити від роботи в одному режимі до роботи в іншому, а деякі можуть бути шарувати один на одного, надаючи різні функціональні можливості в різних частинах вашої програми.
Більш потужні сховища даних
Можливо, вам доведеться зберігати все більші та більші обсяги даних, все ще покладаючись на власну програму управління складністю маніпулювання даними. Доступний вам цілий ряд магазинів ключових цінностей, з різними можливостями підтримки відповідних функцій. До цієї категорії потрапляють інструменти NoSQL , як і інші.
Це очевидний шлях до збільшення, коли наступне описує вашу заявку:
- Це незвично важке поводження з читанням
- Ви все гаразд, торгуючи більш високою ефективністю за менші (короткострокові) гарантії послідовності (багато пропонують "можливу послідовність").
- Це "безпосередньо" управління більшою частиною маніпулювання даними та відсутність узгодженості (на практиці ви, ймовірно, спочатку скористаєтеся інструментом сторонніх розробників, хоча врешті-решт, ви внесете це у свою програму або у спеціальний проміжний прошарок) .
- Ви хочете масово масштабувати обсяг даних, які ви зберігаєте, та / або вашу здатність шукати їх, використовуючи "відносно прості" вимоги щодо маніпулювання даними.
Тут є приміщення для хитання - ви можете змусити кращу послідовність читання для повільнішого читання. Різні інструменти та параметри надають маніпулювання даними apis, індексування та інші параметри, які можуть бути більш-менш придатними для легкого написання конкретної програми. Отже, якщо вищезазначені пункти майже повністю описують вашу програму, ви можете бути "досить близькими" для роботи з більш потужним рішенням для зберігання даних.
Загальновідомі приклади: CouchDB , MongoDB , Redis , хмарні рішення для зберігання даних, такі як Azure Microsoft , Google App Store Store Google і ECE Amazon.
Більш складні двигуни для обробки даних
Сімейство "SQL" програми зберігання даних, як і ряд інших, краще описуються як засоби маніпулювання даними, ніж чисті механізми зберігання даних. Вони надають широкий спектр додаткових функціональних можливостей, крім зберігання даних, а також часто, крім того, що доступно в магазині речей, що є ключовим значенням. Ви хочете пройти цей шлях, коли:
- Ви абсолютно повинні прочитати послідовність, навіть якщо це означає, що ви будете брати участь у виконанні.
- Ви хочете ефективно виконувати дуже складні маніпуляції з даними - подумайте про дуже складні операції ПРИЄДНУЙТЕСЯ та ОНОВЛЕННЯ, кубики даних та нарізки тощо.
- Ви все гаразд, торгуючи жорсткістю для продуктивності (подумайте, вимушені, фіксовані формати зберігання даних, такі як таблиці, які неможливо легко та / або ефективно змінити).
- У вас є ресурси для вирішення часто складнішого набору інструментів та інтерфейсів.
Це більш "традиційний" спосіб мислення бази даних або сховища даних, і існує вже набагато довше - тому тут доступно багато , і часто існує багато складних питань. Це можливо, хоча це вимагає певного досвіду та знань та побудови простих рішень / уникнення значної складності - ви, швидше за все, в кінцевому підсумку використовуєте сторонні інструменти та бібліотеки для управління більшою частиною для вас.
Добре відомі приклади - MySQL , SQL Server , база даних Oracle та DB2 .
Аутсорсинг роботи
Існує декілька сучасних сторонніх інструментів та бібліотек, які взаємодіють між вашими інструментами зберігання даних та вашим додатком, щоб допомогти вам керувати складністю.
Вони намагаються спочатку забрати більшість або всю роботу, яка спрямована на управління та маніпулювання сховищами даних, і в ідеалі дозволяють зробити плавний перехід у складність лише тоді, коли і якщо це потрібно. Це активний напрям підприємництва та досліджень, який має декілька останніх результатів, які є негайно доступними та корисними.
Добре відомими прикладами є інструменти MVC ( Django , Yii ), Ruby on Rails та Datomic . Тут важко бути справедливим, оскільки в буквальному сенсі є десятки інструментів і бібліотек, які виконують функції обгортки навколо API різних сховищ даних.
PS: якщо ви віддаєте перевагу відео текстовим, ви можете переглянути деякі відеозаписи, пов’язані з базою даних Rich Hickey; він робить хорошу роботу з з'ясування більшої частини мислення, що входить у вибір, проектування та використання сховища даних.