2012-07-16 50 views
1

現在大容量存儲的圖像格式,我已閱讀這些問題可能有這個問題的關係:Scalable Image StorageLarge scale image storagehttps://serverfault.com/q/95444

下面的事情我已經找到了,之前我問我的問題:用於相對於存儲系統的性質

 
1. Facebook uses Haystack (something CLOSED-SOURCE to the open-source world) 
which is very efficient. Its a form of File system storage, engineered for speed
and large metadata management.
2. Any Operating System has a file limit in directories and may start to perform
extremely poorly when this limit is being exceeded.
3. Most NoSQL developers, have found it easy to use CouchDB/CouchBase Server
to handle images as it handles it as an attachment, glued to a document (record
in the database). However, still, this is file system storage.
4. HDFS, NFS, ZFS, are all File systems that may make it easy to handle large
distributed data. However, at applications like facebook, they could not help
5. Any proper form of caching is very essential to highly Image dependent
applications
6. Some PHP developers (mostly) have used MySQL to keep image meta-data while
creating folders and sub-folders (matching the meta-info) on the file system.
Each image will have a random hash name in relation to the meta-data in the
database to enable fast location on the file system

瞭解這些報表和更多的人後,我已經認識到其非常昂貴,以保持數十億不斷越來越多的文件系統上的圖像。如果任何人使用雲存儲(如Amazon S3),則會由於高圖像流量以及應用程序的存儲空間而導致業務中斷。

我已經評估使用CouchBase Server,管理圖片作爲附件。但是,對於圖像增長應用程序,這也是一個文件系統存儲,我想知道如果成千上萬的人同時訪問圖像,Couch基礎會如何表現。我可以使用Cloudant/Big Couch,它具有自動分片/負載平衡功能。主要原因在於NoSQL解決方案還可以在文件系統上保留映像,並且以高併發速率請求映像時,這可能會導致整個服務(映像可能很重)。

我的思考

我想管理我的圖像爲SVG格式。這是因爲,我認爲我可以將此SVG數據作爲文本存儲在我的存儲中。現在,大多數NoSQL數據庫的文檔(記錄)大小至少不超過4MB(不確定)的大小限制。這提出了一個問題,因爲根據圖像,SVG文件甚至可以達到6-10MB。所以,我認爲我不能使用Couch基礎服務器來存儲SVG。此外,應用程序的性質是這樣的,圖像數據不斷增長,從不存檔/從不刪除:沙發基地不利於這種數據(高度持久和不變的數據)。

這使我回到了RDBMS(尤其是Oracle),這些文檔都是以良好的文本壓縮而聞名的。如果我得到SVG數據加上它的元數據並將它作爲BLOB存儲在Oracle數據庫中,我有一種感覺,這可以工作。我聽說Oracle表甚至可能增長到TB,可能是因爲分區或某種碎片。但總的來說,對於一個Oracle表達到20GB,包含文本,我認爲這將是很多數據。
現在,我的問題,從所有的上述調查結果出來了:

1.爲什麼開發商保持選擇的圖像文件系統存儲,而不是SVG,這在我(可能天真)的思想,是SVG可以作爲文字處理,因此可以被壓縮,加密,消化,拆分,易存儲等?

2.什麼複雜性是有當一個應用程序使用的圖像完全爲SVG,SVG提供服務給瀏覽器,而不是實際的圖像文件?

3.這在技術上是更多的內存干擾到網絡服務器:從文件系統讀取提供圖片文件(.png,.JPG,.GIF),並提供圖片爲SVG(可能是從一個數據庫,或從中間層),特別是在重加載,Facebook的一個示例場景?

4. SVG在不同「縮放」或分辨率下渲染時似乎不會失去質量,爲什麼仍然沒有開發人員在圖像動態應用程序中使用SVG?我的意思是,在從PNG,JPG或GIF轉換爲SVG時,是否存在已知的質量損失?

5.對於存儲高度持久的元數據以及持久化的SVG數據,我是否像使用Oracle/MySQL Cluster那樣使用RDBMS非常天真?

請突出,並提供有關大的圖像存儲格式你的建議。由於

編輯/ UPDATE

有喜歡Image Magick工具,提供處理圖像的命令行選項。我可能需要的最重要的想法是這樣的:可以CouchBase服務器(?是否single serverversion 2.0能夠在「用戶體驗可接受的性能」,或在「社交網絡規模」的服務形象)

回答

1

在數據庫

是什麼文件,但一個數據,什麼是文件系統,但一個數據庫?數據庫中的記錄,文件系統中的文件,KV商店中的鍵和值 - 這些都是同一棵樹的成果。

數十年來開發的純文件系統是爲了在本地交付文件 - 最重要的是您可以構建分佈模型。

HDFS之類的東西包含作爲文件系統本身的一部分的分發,但是當您嘗試在本地處理文件時強制產生不必要的開銷。

像關係數據庫或KV商店這樣的東西可能會幫助您佈局圖表或存儲無痛更多位元數據,但除非它們專門設計用作文件存儲系統,否則它們會失敗。

採摘存儲系統全是關於權衡的問題,由您決定什麼纔是解決問題的最佳解決方案。而且有可能你的問題甚至不能接近Facebook的問題。很少有服務器與cdn在他們之上,你會好起來的。

關於文件格式

  1. SVGs不會定期照片的效果,你想都別想了。
  2. 在大範圍內,當您接受文件時,您希望進行最少量的轉換:如果圖像不符合您的要求並存儲,請重新縮放/壓縮/裁剪圖像。除非你在這些圖像上做了一些魔術,否則你不想將它們轉換成不同的格式或壓縮它們,而不需要它們。
  3. 在要你的文件被(按優先級排序)規模大:
    • 從客戶端的緩存
    • 從操作系統的緩存/內存擔任
    • 直接從文件系統
送達
1

首先,我想要提到你對圖像文件格式的理解可能是天真,因爲你沒有提供很多細節。您打算如何將(例如)PNG圖像存儲爲「SVG格式」?

我無法回答你所有的問題,但我會做出嘗試。

  1. 「文件系統或SVG」是一個錯誤的二分法,它很容易可以JPG斑點存儲在數據庫中,或者文件系統存儲SVG文件。您也可以將任何位圖圖像格式處理爲文本。如果您想要一個示例,請嘗試打開包含嵌入式位圖數據的PostScript文件。你的「爲什麼不」的問題意味着兩者可以互換,而且通常不是。舉例來說,我的公司已經評估了一系列用於文檔存儲的不同文件格式,並且根據具體情況我們使用了PDF(不寒而慄)和PS。出於兩個原因,我們沒有使用SVG。首先,雖然multi-page documents是官方標準,但SVG編輯和觀衆似乎對它們有不連貫的支持。其次,SVG在以自動方式打印時會出現一些複雜情況(爲了演示,嘗試這個實驗:掀起一個SVG文件和一個等效的PostScript文件,然後嘗試使用lp進行打印)。

  2. 我已經提到了兩個(儘管如果你正在處理一個web應用程序,既然你的客戶可能會使用瀏覽器的渲染引擎,並且你可能不需要多於一頁)。唯一的另外一個是瀏覽器支持,它在以前的IE版本上一如既往的不穩定。您還必須瞭解字體情況;要麼確保任何花哨的印刷術被視爲一條路徑,要麼確保只使用你知道觀衆可以訪問的字體(對於網絡應用程序,CSS3 helps a bit there)。

  3. SVG和其他向量/程序表示方式往往較小,所以我傾向於說服務器可以更輕鬆地處理它們。這不是建立在任何測試基礎上的,所以請帶上一粒鹽。請記住,他們確實傾向於在客戶端消耗更多的資源,但這在網絡環境中不應該是一個大問題。

  4. 如果你的圖像可以表達爲SVG,是的,非常好的主意。但是,將任意位圖轉換爲向量表示是AFAIK一個開放問題。有些東西不能很好地轉換,即使是手動轉換,有些東西實際上是以SVG表示的大於JPG的。對於商業文檔,流程圖或印刷術,矢量更好(除了上面提到的字體問題)。某些類型的插圖可以更好地作爲矢量,而其中一些作爲柵格效果更好。最後,如果你開始使用位圖(比如照片),將其轉換爲SVG會顯着降低質量,或者花費大量手動時間(如果它可以很好地完成)。

  5. 這是我無法真正回答的那個,因爲我從來沒有建立任何你看起來瞄準的規模。

+0

工具像圖像magick:http://www.imagemagick.org/script/convert.php提供格式轉換的命令行選項。就像我說過的,我從來沒有用過很多圖像(這就解釋了'天真')。你可能不需要提醒我我的天真:)但謝謝你的回答 – 2012-07-16 13:36:11

+0

@MuzaayaJoshua - 這就是我以爲你的意思。在提交SVG作爲One True Format之前,嘗試使用'convert'將JPG轉換爲SVG並查看輸出。如果它像PS轉換過程一樣,'imagemagick'將通過使用位域將柵格「轉換」爲矢量。這並沒有給你任何一個矢量的好處(可伸縮分辨率,小文件大小等)。我已經有了處理條形碼的一些經驗,我可以告訴你,imagemagick生成的矢量/程序比使用位圖嚴格得更糟,儘管正確生成的矢量/程序不會。 – Inaimathi 2012-07-16 16:19:22

1

我建議在S3中存儲你的圖像 - 不要擔心滾動你自己,直到經濟迫使你。不用擔心用戶關心的事情,而不是如何存儲Blob。就Couchbase(我是共同創始人)而言,我們看到人們在類似用例中使用它:通常用於元數據和圖像跟蹤(誰擁有它,時間戳,標籤,基本上任何你想存儲或查詢的東西。 )Couchbase記錄將包含S3上存儲的實際圖像的URL。

0

「SVG不適用於普通圖片,甚至不會爲此做夢。」

「但是,將任意位圖轉換爲向量表示是AFAIK的一個開放性問題。有些東西甚至手動轉換都不好,而有些東西實際上以SVG表示時大於JPG。

我認爲這兩種說法都是錯誤的。

https://sites.google.com/site/jcdsvg/svg_paradoxes.svg

見例如三,四。貓圖像被保存爲中等分辨率的png文件,這使得圖像的縮放成爲高分辨率。這是一個更高的文件大小,然後是一個普通的Web圖像,但這是有意的。

將位圖圖像存儲爲SVG與將它們放入SVG容器一樣簡單。