Направляющие: Хранить двоичные файлы в [закрытой] базе данных

вы можете попробовать

Если ваш div выглядит так:

<div id="status">content in here</div>


status = document.getElementById("#status")

status.innerHTML = '';

Он будет выглядеть так:

11
задан insane.dreamer 9 April 2009 в 17:25
поделиться

3 ответа

Это довольно стандартный вопрос о дизайне, и на самом деле не существует «единственно верного ответа».

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

Некоторые из соображений, которые следует учитывать:

  1. Если файл хранится в базе данных, как вы собираетесь предоставлять его через http? Помните, вам нужно установить тип содержимого, имя файла и т. Д. Если это файл в файловой системе, веб-сервер позаботится обо всем этом за вас. Очень быстро и эффективно (возможно, даже в пространстве ядра), интерпретируемый код не требуется.

  2. Файлы обычно большие. Большие базы данных, безусловно, жизнеспособны, но их резервное копирование медленное и неудобное и т. Д. Зачем делать вашу базу данных огромной, когда вам это не нужно?

  3. Как и 2., действительно легко копировать файлы на несколько машин. Скажи тебе При запуске кластера вы можете просто периодически пересылать файловую систему с вашего главного компьютера на подчиненные и использовать стандартную статическую службу http. Очевидно, что базы данных также могут быть кластеризованы, но это не обязательно так интуитивно понятно.

  4. С другой стороны, если вы уже кластеризуете свою базу данных, то необходимость иметь дело с кластерными файлами в дополнение - это административная сложность. Я бы сказал, что это может послужить причиной для хранения файлов в БД.

  5. Данные BLOB-объектов в базах данных обычно непрозрачны. Вы не можете фильтровать, сортировать или группировать по ним. Это уменьшает ценность хранения его в базе данных. С другой стороны, базы данных понимают параллелизм. Вы можете использовать стандартную модель изоляции транзакций, чтобы два клиента не пытались редактировать один и тот же файл одновременно. Это может быть хорошо. Нельзя сказать, что вы не могли использовать файлы блокировки, но теперь у вас есть две вещи для понимания вместо одной.

  6. Доступность. Файлы в файловой системе могут быть открыты с помощью обычных инструментов. Vi, Photoshop, Word, все, что вам нужно. Это может быть удобно. Как ты собираешься открыть этот документ Word из поля BLOB-объектов?

  7. Разрешения. Файловые системы имеют разрешения, и они могут быть проблемой в тылу. И наоборот, они могут быть полезны для вашего приложения. Разрешения действительно укусят вас, если вы воспользуетесь преимуществом 7, потому что почти гарантировано, что ваш веб-сервер работает с разрешениями, отличными от ваших приложений.

  8. Кэширование (от sarah mei ниже). Это играет на вопрос http выше на стороне клиента (вы не забудете правильно установить время жизни?). На стороне сервера файлы в файловой системе представляют собой очень понятный и оптимизированный шаблон доступа. Большие поля больших двоичных объектов могут или не могут быть хорошо оптимизированы вашей базой данных, и вы почти гарантированно получите дополнительное сетевое отключение от базы данных до веб-сервера.

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

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

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

28
ответ дан 3 December 2019 в 01:34
поделиться

This is a pretty standard design question, and there isn't really a "one true answer".

The rule of thumb I typically follow is "data goes in databases, files go in files".

Some of the considerations to keep in mind:

  1. If a file is stored in the database, how are you going to serve it out via http? Remember, you need to set the content type, filename, etc. If it's a file on the filesystem, the web server takes care of all that stuff for you. Very quickly and efficiently (perhaps even in kernel space), no interpreted code needed.

  2. Files are typically big. Big databases are certainly viable, but they are slow and inconvenient to back up etc. Why make your database huge when you don't have to?

  3. Much like 2., it's really easy to copy files to multiple machines. Say you're running a cluster, you can just periodically rsync the filesystem from your master machine to your slaves and use standard static http serving. Obviously databases can be clustered as well, it's just not necessarily as intuitive.

  4. On the flip side of 3, if you're already clustering your database, then having to deal with clustered files in addition is administrative complexity. This would be a reason to consider storing files in the DB, I'd say.

  5. Blob data in databases is typically opaque. You can't filter it, sort by it, or group by it. That lessens the value of storing it in the database.

  6. On the flip side, databases understand concurrency. You can use your standard model of transaction isolation to ensure that two clients don't try to edit the same file at the same time. This might be nice. Not to say you couldn't use lockfiles, but now you've got two things to understand instead of one.

  7. Accessibility. Files in a filesystem can be opened with regular tools. Vi, Photoshop, Word, whatever you need. This can be convenient. How are you gonna open that word document out of a blob field?

  8. Permissions. Filesystems have permissions, and they can be a pain in the rear. Conversely, they might be useful to your application. Permissions will really bite you if you're taking advantage of 7, because it's almost guaranteed that your web server runs with different permissions than your applications.

  9. Cacheing (from sarah mei below). This plays into the http question above on the client side (are you going to remember to set lifetimes correctly?). On the server side files on a filesystem are a very well-understood and optimized access pattern. Large blob fields may or may not be optimized well by your database, and you're almost guaranteed to have an additional network trip from the database to the web server as well.

In short, people tend to use filesystems for files because they support file-like idioms the best. There's no reason you have to do it though, and filesystems are becoming more and more like databases so it wouldn't surprise me at all to see a complete convergence eventually.

--121 --- 2887608--

Используйте оператор try / catch, чтобы перехватить исключение и обработать его так, как вы хотите.

--121 --- 2692368--

Что если вы переделаете это, чтобы использовать GetTable (). Where (...), и поместите туда свою фильтрацию?

Это было бы более эффективно, так как метод расширения Where лучше позаботиться о вашей фильтрации, чем извлекать всю таблицу из списка.

--121 --- 2561342--

Ответ Эрика великолепен. Я также добавлю, что если вы хотите выполнять какое-либо кэширование, гораздо проще и проще кешировать статические файлы, чем кешировать содержимое базы данных.

2
ответ дан 3 December 2019 в 01:34
поделиться

Если вы используете плагин, такой как Скрепка , вам не о чем беспокоиться или. Есть такая вещь, которая называется файловая система, куда должны идти файлы. То, что это немного сложнее, не означает, что вы должны поместить свои файлы в неправильное место. И с скрепкой (или другими подобными плагинами) это не сложно. Итак, файловая система gogo!

0
ответ дан 3 December 2019 в 01:34
поделиться
Другие вопросы по тегам:

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