2012-06-27 60 views
2

根據業務需求我需要提供複製GridFS上某些文件內容的可能性。當然,它可以通過域特定的層完成。但在這種情況下,我可以看到一些開銷:從蒙戈服務器服務器端Mongodb GridFS文件複製

  • 取流
  • 在業務層
  • 閱讀
  • 地方回到蒙戈服務器分配內存

明顯的解決方案是編寫將在單個服務器綁定中執行復制的mongo-side JavaScript。 所以我的問題:

  • 哪裏是描述API來管理JavaScript的GridFS?
  • 如果我的GridFS被分片,是否有任何問題?
  • 如果我的GridFS被複制,是否有任何問題?

預先感謝您

回答

0

的 '正常' 的JS驅動程序不支持GridFS的。

你可以在Node.js中做到這一點。該文件是在這裏:

對於副本集的文檔可以在這裏找到適合的Node.js:

http://mongodb.github.com/node-mongodb-native/markdown-docs/replicaset.html

因爲你可以使用一些文件的簡單的一次性複製命令行上的mongofiles(使用臨時文件:():

http://www.mongodb.org/display/DOCS/GridFS+Tools

mongofiles --host HOST get currentfilename 
mongofiles --host HOST put -l currentfilename newfilename 
rm currentfilename 

但是我不知道mongofiles如何與分片和複製品一起工作,但我期望它能夠正常工作。

+0

你沒有得到問題 - 我不需要JS驅動程序。驅動程序適用於消費者(稱爲Java或C++)。但是在mongo端有層可以讓程序員放置腳本來管理數據庫。很好的示例mapReduce例程 - 它們在mongo端執行。所以我正在尋找可以幫助我避免驅動開銷的API(請參閱我的預先要求)。這就是爲什麼Node.JS根本就不是答案。 – Dewfy

2

因爲GridFS文件是不可變的,所以您不需要在單個服務器中複製GridFS文件:您可以創建,讀取或刪除它們,但不能修改它們。所以沒有理由複製。

從一臺服務器複製到另一臺應該通過驅動程序完成;沒有直接從MongoDB服務器複製到另一個的內置支持。

+0

不幸的是我需要複製。根據業務規則,每個文件都與1:1關聯,並與另一個集合中的某個條目關聯。從收藏中刪除記錄必須刪除文件。從這個需求增長我關於複製的問題。 – Dewfy

+0

這可以在不使用引用計數進行復制的情況下完成。 –

0
gridfs_session = gridfs.GridFS(mongo.session) 
out_file = gridfs_session.get(file_id) 
new_copy = gridfs_session.put(out_file, content_type=out_file.content_type)