В настоящее время я сталкиваюсь с проблемой дизайна.
Я пишу приложение, которое управляет «документы» в графике ..
На графике каждый узел имеет документы в своей очереди.
Наконец, я выбрал MySQL для управления базой данных и сохранения документов.
Схема в основном состоит из 2 важных таблиц: документ и элемент очереди.
queueelement имеет ссылку на документ.
Очередь узла представляет собой список элементов очереди.
В основном, классы выглядят следующим образом:
class Document
{
int id;
string name;
//...
// other attributes here
//...
std::map<string, string> attributes;
void foo();
void what();};
class QueueElement
{
int id;
int docid;
int priority;
string nodename;
};
class Node
{
std::list<QueueElementPtr> elements;
};
Схема базы данных очень проста, и мне не нужно что-то более сложное.
Серверное приложение управляет узлами.
По сути, когда узел активен, он вставляет первый документ в очередь, обрабатывает его и помещает в очередь дочернего узла.
Я выбрал MySQL, потому что мне не нужна большая база данных, как Oracle, и мне не понадобятся сложные SQL-запросы.
Я также выбрал MySQL, потому что я не могу позволить себе OODB, такой как Versant или Objectivity. Действительно, объектное отображение является ключом.
Я использовал Versant DB в пробном режиме, отличный продукт … но на самом деле слишком дорого.
Я думаю о том, как эффективно загрузить мой график в память.
С одной стороны, я боюсь столкнуться с нехваткой памяти.
С другой стороны, я хочу избежать слишком большого количества операций выбора.
Я обязан правильно загружать очереди в память.
Однако я думаю, что я не обязан хранить объект «Документ» в памяти, возможно, для загрузки его с помощью «выбора», когда узел будет обрабатывать, этого будет достаточно.
На самом деле я не эксперт по БД. Я знаю SQL и как создавать таблицы с соответствующими индексами. Но я должен признать, что игнорирую то, как двигатель оптимизирует ввод-вывод и память.
В моем приложении производительность является приоритетом.
Это приложение должно работать на выделенном сервере, а база данных MySQL расположена на том же сервере и не будет содержать никакой другой схемы.
Я использую API коннектора MySQL c ++, и каждый запрос (вставка, удаление, обновление) предопределен объектом PreparedStatement при инициализации движка.
Как бы вы управляли собственной базой данных в памяти, используя такие продукты, как MySQL?
Вы думаете, я не в том направлении?
Благодарю.
З.
Задача ещё не решена.
Других решений пока нет …