Кто-нибудь хранит необработанные данные SVG внутри mongodb? - PullRequest
3 голосов
/ 11 августа 2010

Я работаю над проектом, в котором я хочу хранить необработанные данные SVG внутри моего mongodb. Сейчас это выглядит немного глупо, потому что мне нужно экранировать строку svg следующим образом:

{ "_id" : ObjectId("4c61e60d4d02da615f175b6e"), "name" : "Triangle", "svg-data" : "<?xml version=\"1.0\" encoding=\"utf-8\"?> <!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) --> <!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"> <svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"63.781px\" height=\"85.042px\" ... bunch of data elided here ... </svg>" }

Это несколько приемлемо, но тогда мне может понадобиться отключиться (это слово?) Или расшифровать на стороне клиента, как только json будет передан обратно с сервера.

Мне любопытно, если кто-то еще делает это (я не смог найти никаких примеров в Google или переполнении стека) и / или есть ли какой-нибудь совет относительно лучшего способа сделать это (или лучшего способа сделать это ).

1 Ответ

2 голосов
/ 12 августа 2010

Лично я еще не сохранял файлы в MongoDB, но согласно mongodb.org довольно эффективно хранить файлы в базе данных.Хранение файлов в базе данных дает следующие преимущества:

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

Теперь, вещь, которая, кажется, сдерживает вас, - это экранирование данных.Однако вам нужно экранировать данные SVG только в том случае, если вы вручную вводите операторы в оболочку MongoDB.Если вы используете драйвер для взаимодействия с базой данных, драйвер позаботится о экранировании специальных символов в данных.Когда вы считываете данные в своем коде, драйвер также удаляет данные для вас.

Пример, демонстрирующий в оболочке MongoDB:

var myObject = { "myKey": "Data with \"special\" characters." }
print(myObject.myKey)

В первой строке Iприходится избегать кавычек, потому что я вручную набираю оператор.Драйверы MongoDB сделают это за вас , если вы будете взаимодействовать с базой данных из кода.

Оператор print() автоматически удаляет данные, поэтому вывод будет:

Данные со «специальными» символами.

Драйверы базы данных также автоматически отменяют строки.Если вы отправляете объект JSON в браузер клиента и считываете значения с помощью JavaScript, браузер также удаляет данные .

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

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