Конечная проблема с использованием 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
Единственное ограничение тому, чтобы хранить документы в базе данных является технологическим.
А база данных отношения предназначена, чтобы быть персистентным хранилищем данных в жестком реальном времени предприятия. Как хорошо это может работать, та функция варьируется от базы данных до базы данных и системы к системе, конечно. Но идеально свойства ACID реляционная база данных , предназначил для создания этого хранилищем всего данные предприятия . Файловая система, системы контроллера пересмотра и другие локальные системы хранения хранилища могли бы иметь определенные преимущества, но они не разработаны для хранения данных предприятия как такового.
, Если документы Вы храните, квалифицируют как данные предприятия - если они постоянно используются всюду по предприятию - затем логично сохранить их в базе данных. Если у Вас есть проблемы с хранением в базе данных, возможно, DBA может найти лучшее решение. Вам, возможно, даже придется переместить их из базы данных по причинам производительности, но я не думаю, что необходимо переместить их из базы данных по причинам лучших практик.
, Конечно, если документы не являются данными предприятия, если бы они только используются для одного приложения, скажем, затем, перемещение их из базы данных также имело бы смысл.
Рассмотрите хранить Ваши документы в подверсии или другую систему управления версиями. У Вас будет хорошее резервное копирование, способность посмотреть на старые версии документов и великолепного доступа к сети. См." Моя жизнь на подверсии ".
Персональные Экспертные знания: действительно ли Вы - администратор дб или программист?
безопасность: одна установка для базы данных по сравнению с 2 для системы баз данных и файловой системы. Действительно ли это - беспокойство кого-то случайно перемещение/удаление файлов? В комплексе, устанавливающем администратора, может принять решение переместить файлы в другой сервер и просто изменить Долю или отображение. Я знаю, этого никогда не происходило бы.
базы данных New улучшаются в этой области.
Единственное преимущество I видит к тому, чтобы хранить документы в базе данных, простота перемещения тех документов другой среде. Кроме этого, я не сделал бы этого по всем причинам, уже упомянутым.
Храните свои документы как файлы, такие как .doc, если Вы хотите смочь получить доступ к файлам и отредактировать и повторно сохранить их.
Хранят Ваши документы как файлы, такие как .pdf или .tiff, если Вы хотите фактические исторические копии, которые могут быть задержаны и воспроизведены.
Хранят всю информацию относительно Ваших файлов (таких как даты, авторы, местоположение) в Вашей базе данных.
Я всегда храню базовую информацию и путь к файлу для документов в базе данных, но никогда самого документа. Редко делает весь документ, должен быть в базе данных.
Это позволяет намного больше гибкости в использовании тех документов. Например, хотите к используемому многоуровневому резервному хранилищу и механизмам дедупликации? Попробуйте это в БЛОБАХ Oracle.
Наоборот я пошел бы для устройства хранения данных в базе данных по нескольким причинам:
, Базы данных сделаны хранить данные. Файлы являются просто данными.
, Хотя сказавший, что существуют преимущества для того, чтобы хранить файлы в файловой системе, руководитель один являющийся производительностью базы данных лучше и размер подавляется. SQL Server 2008 позволяет Вам иметь лучший из обоих миров с помощью FileStream. Read это техническое описание для получения дополнительной информации
Я сохранил изображения как БЛОБЫ в базе данных однажды и сожалел о нем в первый раз, когда я должен был выполнить пакетную обработку на тех изображениях. Было бы намного легче сделать это в файловой системе. Кроме того, как Вы упомянули, это намного быстрее для получения документов, если они живут на файловой системе.
Мое простое представление: файловая система должна хранить файлы, и реляционная база данных должна хранить реляционные данные.
Мое самое большое беспокойство с тем, чтобы хранить файлы в самой базе данных управляет размером и сложностью резервных копий и другого технического обслуживания дб.
Одна стратегия смягчить эту трудность (по крайней мере, в MS SQL) состоит в том, чтобы создать отдельные разделы базы данных, потенциально сохраненные на различных дисках.
Затем разделяют Вашу схему данных так, чтобы Ваши метаданные приблизительно , файлы расположены на одном разделе и фактических файлах BLOB, были расположены в отдельном разделе.
Эти разделы могут быть сохранены в различных расписаниях или даже восстановлены отдельно.
Я предпочитаю , хранят документ в файловой системе , и затем хранят ссылку на файл и связанные метаданные файла в базе данных .
Это оказалось более удобным, легче поддержать, и менее дорогой, чем альтернатива.
На основе моего опыта, которые, как я сказал бы, сохраняют их в базе данных. Мы переместили две из наших систем к выполнению этого.
Помещение его в средствах базы данных:
каталога, у Нас были документы из базы данных. Это становится проблемой с большим количеством документов. Нормальный каталог в Linux является одним блоком, который обычно является 4K. У нас был каталог, который был 58 МБ , потому что он имел столько файлов в нем (это был просто плоский каталог, никакая иерархия). Это имело что многие косвенные блоки. Это приняло час для удаления. Потребовались минуты для получения количества количества файлов в каталоге. Это было плачевно. Это находится на ext3.
С файловой системой Вам нужно:
, Это - действительно боль. Для любого нетривиального количества документов я рекомендовал бы против файловой системы на основе того, что я видел.
Храните двоичные файлы в файловой системе. Создайте приложение ASP.NET для операций извлечения и устройства хранения данных. Можно быть необычными с веб-приложением (управление версиями документа, многоуровневая безопасность, и т.д.). Я думаю, что это - согласие в промышленности управления документом.
, Так как Ваше "количество документа растет решительно", похож, это становится крупным масштабом. Можно хотеть начать смотреть на третье лицо, out-of-the-box решения (такой как http://kofax.com/capture/ - у меня есть обширный опыт с этим!), чтобы сделать "грязное задание" для Вас. Или еще лучше, рассмотрите рассмотрение SaaS, предлагающей, такой как эти парни http://www.edocumentsolutionsllc.com/
:-)
Большинство систем управления документами корпоративного класса НЕ хранят объектный файл в базе данных. То, что вы можете , не означает, что вы должны . Если для вас важны масштабируемость и производительность и у вас большой набор документов, вам нужно быть очень осторожным с хранением объектов в базе данных. Примите во внимание следующее:
В случае создания образа документа 200 миллионов файлов TIFF можно считать относительно большой, но не массивной системой. В более крупных системах может быть более 1 миллиарда объектных файлов. Скажем, при 20 КБ на битовый TIFF у вас может быть 4 ТБ хранилища объектных файлов. Сколько времени займет резервное копирование БД? Сколько времени займут ваши запросы? Какова частота доступа к этим объектам? Если эти объекты имеют высокую частоту доступа, вы хотите, чтобы ваш высокопроизводительный сервер БД тратил все свое время на обслуживание файлов? Если у вас есть миллионы объектов, вам нужно быть чертовски осторожным при разработке решения, в котором объекты хранятся в базе данных.
Предположим, что теперь вам нужно преобразовать эти 200M TIFF-файлов в PDF-файлы. Будьте готовы поставить свое решение на колени, поскольку ваш сервер базы данных тратит свое время на обслуживание каждого объектного файла в процессе преобразования и последующее повторное сохранение результатов.
Например, Sharepoint известен тем, что хранит объекты в базе данных. Sharepoint также известен проблемами масштабируемости.
Мой ответ:
Предположим, что теперь вам нужно преобразовать эти 200M TIFF-файлов в PDF-файлы. Будьте готовы поставить свое решение на колени, поскольку ваш сервер базы данных тратит свое время на обслуживание каждого объектного файла в процессе преобразования и последующее повторное сохранение результатов.
Например, Sharepoint известен тем, что хранит объекты в базе данных. Sharepoint также известен проблемами масштабируемости.
Мой ответ:
Предположим, что теперь вам нужно преобразовать эти 200M TIFF-файлов в PDF-файлы. Будьте готовы поставить свое решение на колени, поскольку ваш сервер базы данных тратит свое время на обслуживание каждого объектного файла в процессе преобразования и последующее повторное сохранение результатов.
Например, Sharepoint известен тем, что хранит объекты в базе данных. Sharepoint также известен проблемами масштабируемости.
Мой ответ:
Для небольших систем (<1M файлов) можно рассмотреть возможность хранения файлов в БД.
Для больших систем (> 1M файлов) сохранение файлов в БД является ошибкой.