О системе
О компании
Цены
Наши статьи
Наши клиенты
ООО «Результат»
Введение
ORM или ДОБД
Стереотипы поведения и навыки адаптации объектов в документоориентированной БД
ДОБД на SQL
Доменный принцип построения системы
Иерархия документов в журнале
Пример построения сложной СЭД на основе RSF

SQL-хранилище без реляционных таблиц

Я не люблю РБД, но это не значит, что я не люблю SQL-серверы. Я снимаю шляпу перед разработчиками, посвятившим свои жизни оптимизации SQL-серверов, и ни в коем случае не хочу от SQL отказываться.
Мы тестировали нашу систему на журнале из 1 000 000 документов на SQLite3, MySQL, PostgreSQL. SQLite3 - тормоз, MySQL и PostgreSQL работают великолепно и по скорости одинаковы.
При всем уважении к MongoDB, брать ее за основу мы не рискнули и правильно сделали. По мере ее распространения появляется все больше критики и в части быстродействия, и в части функциональности, не говоря уже о сложностях интеграции с существующими системами. Все чаще я встречаю статьи (почему-то исключительно импортные) о том, что выбрав MongoDB и сделав на ней систему, разработчики вынуждены от нее отказаться и вернуться к SQL-серверам.
Кроме того она не совсем бесплатная: подписка на MongoDB стоит для граждан США $7500. А я не гражданин США. А если вдруг санкции?

Короче, мы сделали ДОБД на основе SQL-таблицы. Сделать это оказалось не просто, а очень просто.
Вся информация об объектах хранится в таблице из 5 столбцов:

unid xcrt xnam xval xmdf
binary(16) timestamp text(32) text(65000) timestamp
UUID момент создания записи имя поля значение поля момент перевода записи в историю
Столбец "xmdf" совместно с атрибутом "MODIFIER" позволяет отследить, кто когда какие поля правил.

Для загрузки документа в классе Database имеется соответствующий метод:

def getDocumentByUNID(self, unid):
    sql = "SELECT xnam, xval, xcrt FROM {0} WHERE (unid = {1}) AND (xmdf IS NULL)".format(self.dbTable, unid)
    ...

Сие означает, что мы хотим получить для документа, имеющего вот такой вот unid, список всех актуальных (xmdf IS NULL) полей с их значениями и датой создания.

Таких таблиц в системе может быть много. Раз уж мы используем термин документ, то вполне логично хранилище однотипных документов назвать журналом. О том, как формируются названия журналов, написано ниже. Здесь же я хочу добавить, что в дополнение к описанной таблице с данными мы для повышения быстродействия создаем еще ряд служебных таблиц, включающих индексированные коллекции документов.
Состав этих таблиц задается правилами и может быть разным для разных журналов. В приложении есть кнопка, по которой все эти таблицы удаляются и пересоздаются заново.




Яндекс.Метрика