Рекомендуемое местоположение для хранения документов - в базе данных или в другом месте?

Конечная проблема с использованием this вместо prototype заключается в том, что при переопределении метода конструктор базового класса все равно будет ссылаться на переопределенный метод. Рассмотрим это:

BaseClass = function() {
    var text = null;

    this.setText = function(value) {
        text = value + " BaseClass!";
    };

    this.getText = function() {
        return text;
    };

    this.setText("Hello"); // This always calls BaseClass.setText()
};

SubClass = function() {
    // setText is not overridden yet,
    // so the constructor calls the superclass' method
    BaseClass.call(this);

    // Keeping a reference to the superclass' method
    var super_setText = this.setText;
    // Overriding
    this.setText = function(value) {
        super_setText.call(this, "SubClass says: " + value);
    };
};
SubClass.prototype = new BaseClass();

var subClass = new SubClass();
console.log(subClass.getText()); // Hello BaseClass!

subClass.setText("Hello"); // setText is already overridden
console.log(subClass.getText()); // SubClass says: Hello BaseClass!

по сравнению с:

BaseClass = function() {
    this.setText("Hello"); // This calls the overridden method
};

BaseClass.prototype.setText = function(value) {
    this.text = value + " BaseClass!";
};

BaseClass.prototype.getText = function() {
    return this.text;
};

SubClass = function() {
    // setText is already overridden, so this works as expected
    BaseClass.call(this);
};
SubClass.prototype = new BaseClass();

SubClass.prototype.setText = function(value) {
    BaseClass.prototype.setText.call(this, "SubClass says: " + value);
};

var subClass = new SubClass();
console.log(subClass.getText()); // SubClass says: Hello BaseClass!

Если вы считаете, что это не проблема, это зависит от того, можете ли вы жить без частных переменных и достаточно опытный, чтобы узнать утечку, когда вы ее видите. Кроме того, необходимость поставить логику конструктора после определения методов неудобна.

var A = function (param1) {
    var privateVar = null; // Private variable

    // Calling this.setPrivateVar(param1) here would be an error

    this.setPrivateVar = function (value) {
        privateVar = value;
        console.log("setPrivateVar value set to: " + value);

        // param1 is still here, possible memory leak
        console.log("setPrivateVar has param1: " + param1);
    };

    // The constructor logic starts here possibly after
    // many lines of code that define methods

    this.setPrivateVar(param1); // This is valid
};

var a = new A(0);
// setPrivateVar value set to: 0
// setPrivateVar has param1: 0

a.setPrivateVar(1);
//setPrivateVar value set to: 1
//setPrivateVar has param1: 0

по сравнению с:

var A = function (param1) {
    this.setPublicVar(param1); // This is valid
};
A.prototype.setPublicVar = function (value) {
    this.publicVar = value; // No private variable
};

var a = new A(0);
a.setPublicVar(1);
console.log(a.publicVar); // 1
18
задан Mike Ohlsen 4 February 2009 в 18:33
поделиться

13 ответов

Единственное ограничение тому, чтобы хранить документы в базе данных является технологическим.

А база данных отношения предназначена, чтобы быть персистентным хранилищем данных в жестком реальном времени предприятия. Как хорошо это может работать, та функция варьируется от базы данных до базы данных и системы к системе, конечно. Но идеально свойства ACID реляционная база данных , предназначил для создания этого хранилищем всего данные предприятия . Файловая система, системы контроллера пересмотра и другие локальные системы хранения хранилища могли бы иметь определенные преимущества, но они не разработаны для хранения данных предприятия как такового.

, Если документы Вы храните, квалифицируют как данные предприятия - если они постоянно используются всюду по предприятию - затем логично сохранить их в базе данных. Если у Вас есть проблемы с хранением в базе данных, возможно, DBA может найти лучшее решение. Вам, возможно, даже придется переместить их из базы данных по причинам производительности, но я не думаю, что необходимо переместить их из базы данных по причинам лучших практик.

, Конечно, если документы не являются данными предприятия, если бы они только используются для одного приложения, скажем, затем, перемещение их из базы данных также имело бы смысл.

5
ответ дан 30 November 2019 в 06:46
поделиться

Рассмотрите хранить Ваши документы в подверсии или другую систему управления версиями. У Вас будет хорошее резервное копирование, способность посмотреть на старые версии документов и великолепного доступа к сети. См." Моя жизнь на подверсии ".

0
ответ дан 30 November 2019 в 06:46
поделиться

Персональные Экспертные знания: действительно ли Вы - администратор дб или программист?

безопасность: одна установка для базы данных по сравнению с 2 для системы баз данных и файловой системы. Действительно ли это - беспокойство кого-то случайно перемещение/удаление файлов? В комплексе, устанавливающем администратора, может принять решение переместить файлы в другой сервер и просто изменить Долю или отображение. Я знаю, этого никогда не происходило бы.

базы данных New улучшаются в этой области.

0
ответ дан 30 November 2019 в 06:46
поделиться

Единственное преимущество I видит к тому, чтобы хранить документы в базе данных, простота перемещения тех документов другой среде. Кроме этого, я не сделал бы этого по всем причинам, уже упомянутым.

0
ответ дан 30 November 2019 в 06:46
поделиться

Храните свои документы как файлы, такие как .doc, если Вы хотите смочь получить доступ к файлам и отредактировать и повторно сохранить их.

Хранят Ваши документы как файлы, такие как .pdf или .tiff, если Вы хотите фактические исторические копии, которые могут быть задержаны и воспроизведены.

Хранят всю информацию относительно Ваших файлов (таких как даты, авторы, местоположение) в Вашей базе данных.

0
ответ дан 30 November 2019 в 06:46
поделиться

Я всегда храню базовую информацию и путь к файлу для документов в базе данных, но никогда самого документа. Редко делает весь документ, должен быть в базе данных.

Это позволяет намного больше гибкости в использовании тех документов. Например, хотите к используемому многоуровневому резервному хранилищу и механизмам дедупликации? Попробуйте это в БЛОБАХ Oracle.

0
ответ дан 30 November 2019 в 06:46
поделиться

Наоборот я пошел бы для устройства хранения данных в базе данных по нескольким причинам:

  1. Более простая стратегия резервного копирования
  2. Документы, хранившие в базе данных, может быть индексирована и искала
  3. , Вы не должны волноваться о перемещаемой/безопасности файлах, вмешался
  4. Легкий к порту к другому серверу в случае катастрофического отказа
  5. , Если правительственные мандаты, необходимо хранить данные, возвращающиеся x годы, справляясь с этим использованием базы данных, намного легче

, Базы данных сделаны хранить данные. Файлы являются просто данными.

, Хотя сказавший, что существуют преимущества для того, чтобы хранить файлы в файловой системе, руководитель один являющийся производительностью базы данных лучше и размер подавляется. SQL Server 2008 позволяет Вам иметь лучший из обоих миров с помощью FileStream. Read это техническое описание для получения дополнительной информации

0
ответ дан 30 November 2019 в 06:46
поделиться

Я сохранил изображения как БЛОБЫ в базе данных однажды и сожалел о нем в первый раз, когда я должен был выполнить пакетную обработку на тех изображениях. Было бы намного легче сделать это в файловой системе. Кроме того, как Вы упомянули, это намного быстрее для получения документов, если они живут на файловой системе.

Мое простое представление: файловая система должна хранить файлы, и реляционная база данных должна хранить реляционные данные.

3
ответ дан 30 November 2019 в 06:46
поделиться

Мое самое большое беспокойство с тем, чтобы хранить файлы в самой базе данных управляет размером и сложностью резервных копий и другого технического обслуживания дб.

Одна стратегия смягчить эту трудность (по крайней мере, в MS SQL) состоит в том, чтобы создать отдельные разделы базы данных, потенциально сохраненные на различных дисках.

Затем разделяют Вашу схему данных так, чтобы Ваши метаданные приблизительно , файлы расположены на одном разделе и фактических файлах BLOB, были расположены в отдельном разделе.

Эти разделы могут быть сохранены в различных расписаниях или даже восстановлены отдельно.

5
ответ дан 30 November 2019 в 06:46
поделиться

Я предпочитаю , хранят документ в файловой системе , и затем хранят ссылку на файл и связанные метаданные файла в базе данных .

Это оказалось более удобным, легче поддержать, и менее дорогой, чем альтернатива.

11
ответ дан 30 November 2019 в 06:46
поделиться

На основе моего опыта, которые, как я сказал бы, сохраняют их в базе данных. Мы переместили две из наших систем к выполнению этого.

Помещение его в средствах базы данных:

  • Это легко к доступу, даже с нескольких серверов
  • Это сохранено автоматически (вместо того, чтобы иметь необходимость иметь отдельное задание, чтобы сделать это)
  • , Вы не должны волноваться о пространстве (так как люди мешают DB переполнять диск, но могут забыть контролировать, где документы хранятся)
  • , у Вас не должно быть сложной схемы

каталога, у Нас были документы из базы данных. Это становится проблемой с большим количеством документов. Нормальный каталог в Linux является одним блоком, который обычно является 4K. У нас был каталог, который был 58 МБ , потому что он имел столько файлов в нем (это был просто плоский каталог, никакая иерархия). Это имело что многие косвенные блоки. Это приняло час для удаления. Потребовались минуты для получения количества количества файлов в каталоге. Это было плачевно. Это находится на ext3.

С файловой системой Вам нужно:

  • Отдельный механизм резервного копирования (от резервного копирования DB)
  • Для хранения вещей в синхронизации (таким образом, запись не существует в DB без файла, являющегося там)
  • иерархия А для устройства хранения данных (для предотвращения упомянутой выше проблемы таким образом, никакой каталог не заканчивается с 10 000 с файлов)
  • Некоторый способ просмотреть их с других серверов при необходимости в кластере (так, вероятно, NFS или некоторые такой)

, Это - действительно боль. Для любого нетривиального количества документов я рекомендовал бы против файловой системы на основе того, что я видел.

13
ответ дан 30 November 2019 в 06:46
поделиться

Храните двоичные файлы в файловой системе. Создайте приложение ASP.NET для операций извлечения и устройства хранения данных. Можно быть необычными с веб-приложением (управление версиями документа, многоуровневая безопасность, и т.д.). Я думаю, что это - согласие в промышленности управления документом.

, Так как Ваше "количество документа растет решительно", похож, это становится крупным масштабом. Можно хотеть начать смотреть на третье лицо, out-of-the-box решения (такой как http://kofax.com/capture/ - у меня есть обширный опыт с этим!), чтобы сделать "грязное задание" для Вас. Или еще лучше, рассмотрите рассмотрение SaaS, предлагающей, такой как эти парни http://www.edocumentsolutionsllc.com/

:-)

1
ответ дан 30 November 2019 в 06:46
поделиться

Большинство систем управления документами корпоративного класса НЕ хранят объектный файл в базе данных. То, что вы можете , не означает, что вы должны . Если для вас важны масштабируемость и производительность и у вас большой набор документов, вам нужно быть очень осторожным с хранением объектов в базе данных. Примите во внимание следующее:

В случае создания образа документа 200 миллионов файлов TIFF можно считать относительно большой, но не массивной системой. В более крупных системах может быть более 1 миллиарда объектных файлов. Скажем, при 20 КБ на битовый TIFF у вас может быть 4 ТБ хранилища объектных файлов. Сколько времени займет резервное копирование БД? Сколько времени займут ваши запросы? Какова частота доступа к этим объектам? Если эти объекты имеют высокую частоту доступа, вы хотите, чтобы ваш высокопроизводительный сервер БД тратил все свое время на обслуживание файлов? Если у вас есть миллионы объектов, вам нужно быть чертовски осторожным при разработке решения, в котором объекты хранятся в базе данных.

Предположим, что теперь вам нужно преобразовать эти 200M TIFF-файлов в PDF-файлы. Будьте готовы поставить свое решение на колени, поскольку ваш сервер базы данных тратит свое время на обслуживание каждого объектного файла в процессе преобразования и последующее повторное сохранение результатов.

Например, Sharepoint известен тем, что хранит объекты в базе данных. Sharepoint также известен проблемами масштабируемости.

Мой ответ:

Предположим, что теперь вам нужно преобразовать эти 200M TIFF-файлов в PDF-файлы. Будьте готовы поставить свое решение на колени, поскольку ваш сервер базы данных тратит свое время на обслуживание каждого объектного файла в процессе преобразования и последующее повторное сохранение результатов.

Например, Sharepoint известен тем, что хранит объекты в базе данных. Sharepoint также известен проблемами масштабируемости.

Мой ответ:

Предположим, что теперь вам нужно преобразовать эти 200M TIFF-файлов в PDF-файлы. Будьте готовы поставить свое решение на колени, поскольку ваш сервер базы данных тратит свое время на обслуживание каждого объектного файла в процессе преобразования и последующее повторное сохранение результатов.

Например, Sharepoint известен тем, что хранит объекты в базе данных. Sharepoint также известен проблемами масштабируемости.

Мой ответ:
Для небольших систем (<1M файлов) можно рассмотреть возможность хранения файлов в БД. Для больших систем (> 1M файлов) сохранение файлов в БД является ошибкой.

7
ответ дан 30 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: