Одним из моих приложений является система управления документами, в которой документы хранятся в виде полей BLOB-объектов в БД. Это не вопрос конкретного языка, в любом случае я помещаю Delphi в теги, поскольку это сообщество, к которому я типично задаю вопросы (и многие люди, использующие Delphi, сталкиваются с этими проблемами).
Одна функция, которую мне нужно добавить, это программно добавить некоторые данные в документ. Я делаю простой пример, чтобы понять. Одно поле - это дата создания документа. Для этого пользователь напечатает «тег», например, <DOCUMENT_DATE>
, и дата будет автоматически подставлена при извлечении документа из базы данных.
Итак, у меня есть 2 основные проблемы. ONE то, что использовать в качестве «тега». Самое простое - использовать текстовый тег, поэтому просто введите текст в документ, а затем выполните поиск и замену текста (используя, например, MS Word ActiveX). Я уже делаю это для других целей. Альтернативой может быть использование закладок или другой метод.
Другой вопрос строго связан с предыдущим.
Как мне его хранить? Моя первая идея - сохранить документ в БД с «тегами», поэтому, когда он «извлечен», пользователь видит теги, а когда пользователь открывает его (в режиме только для чтения), он видит замещенный текст. (так в первом случае он видит и во втором «12 октября 2011 года»).
Таким образом, я сохраняю файл один раз, но каждый раз, когда он открывается, возникают сложности при его обработке и выполнении операции Search Replace, что также может быть относительно медленным. Вот почему я попросил другие методы. Как серач заменить на закладку. Самый быстрый, тем лучше.
Альтернатива - хранить документ дважды: один раз с «тегами», а другой с «замещенной версией». Это будет хорошо для производительности: не выполнять поиск и замену, а просто, когда документ открыт в режиме «извлечения», я открою тот, у которого есть теги, а когда открою его в режиме «только чтение», я открою замещенный.
Это, конечно, требует больше памяти, для каждой версии документа (revision1, revision2, ...) мне нужно хранить 2 файла.
Я чувствую, что двойное хранилище является лучшим, потому что оно вообще не повлияет на производительность, я имею в виду, что оно будет таким же быстрым, как сейчас, просто процесс регистрации будет медленнее, так как мне нужно сохранить 2 файла, а не один. Более того, если не включить эту функцию автоматической подстановки во всех документах по умолчанию, у меня не будет двойного размера в дБ.
Но в любом случае я хотел бы услышать некоторые комментарии, поскольку это довольно важное решение.