У меня проблема со скоростью поиска в журнале и размером диска.Он очень большой, имеет около 220 миллионов строк и 25-гигабайтный диск, и для извлечения некоторых выборок требуется несколько минут.
Как это работает?Журнал сохраняется в базе данных с использованием Sql Anywhere, в настоящее время версия 9 и вскоре будет перенесена на 11 (мы попытались 12, но из-за некоторых драйверов и некоторых проблем мы вернулись к 11).
Журнал состоит из двух таблиц (имя изменено на английский, чтобы люди могли его понять):
LogTable
Id, DateTime, User, Url, Actionи TableName. Действие - это то, что использовалось: вставка / удаление / обновление TableName - какая таблица в базе данных была затронута.
LogTableFields
Id, LogTable_Id, FieldName,NewValue, OldValue. LogTable_Id - это внешний ключ от LogTable.FieldName - это поле таблицы из БД.
Важно отметить, что NewValue и OldValue являются типом varchar.Потому что записываются все виды полей из других таблиц (datetime, int и т. Д.).
Почему это было сделано таким образом? Поскольку мы должны записать все важные данные.Система создана для Институционального департамента дорожного движения (я не знаю, написано ли это так на должном английском языке, но теперь вы можете понять, о чем это), и иногда они требуют какой-то случайный отчет.
До сих пор мы делали наш отчет просто с помощью выбора SQL.Однако это займет несколько минут, даже если дата и время отфильтрованы.Не стоит и жаловаться, когда это не часто запрашивают.
Но они требуют все больше и больше отчетов о том, что необходимо создать функцию в программном обеспечении с красивым и красивым отчетом.Поскольку мы никогда не знаем их потребностей, мы должны вернуться к журналу и выкопать данные.
Некоторая информация запрашивается только в журнале.(например, какой пользователь дал кому-то неправильный доступ к автомобилю)
Некоторые идеи, предложенные до сих пор:
Идея 1: Iсделал некоторые исследования, и мне сказали работать с NoSql, используя CouchDB .Но то, что я читаю, кажется, что NoSql не является решением моей проблемы.Я не могу поспорить, почему из-за отсутствия опыта в этом.
Идея 2: Физически отделить таблицы журналов от базы данных или от машины.
Идея3: Создайте зеркало из каждой таблицы с полем версии для ведения истории.
Я бы хотел, чтобы максимизация или изменение архитектуры происходило в случае необходимости.