PostgreSQL 大型物件 BYTEA vs OID
更新:2007-03-29
Source : PostgresDAC
內容: (翻譯未校稿完)
PostgreSQL 大型物件(Large Objects) BYTEA vs OID
名詞:Binary Large OBjects (BLOBs)
在 PostgreSQL 有二種方式用來存放二進制大物件(BLOBs)。首先, 是使用 bytea 類型。第二是, 將使用大物件(Large Objects)的原有能力。
BYTEA 類型
BYTEA 類型或二進制串與簡單的字符串是非常相似, 像 varchar 和 text。但是, 他們由二個特徵上的區別:
- 二進制串具體地准許存放八進制值零和其它"非可印的" 八進制(通常, 八進制在範圍 32 到 126 之外) 。字符串禁止零的八進制, 和並且禁止的八進制值所有其它八進制值和序列是無效達成協議對資料庫的選擇的字符集合內碼。
操作在二進制串處理實際位元組(byte), 但是處理字符串取決於地點設置。在短, 二進制串是適當的為存放程式員作為"未加工的位元組" 認為的資料, 但是字符串是適當的為存放 text。
Similitude 意味, BYTEA 價值將包括對結果資料, 可以成本效率。換句話說, PostgresDAC 當地將裝載所有資料從伺服器並且用戶然後能工作與它。
開發商必須並且記住寄發 BYTEA 值到伺服器, 八進制某些值必須逃脫。總之, 逃脫八進制, 它被轉換成它的小數八進制價值三數字的八進制數等值, 和由二條斜線在之前, 即。 ' \\xxx '。因而在最壞的文件資料的大小被送通過網路也許被增加很多。
OID 類型(大物件)
PostgreSQL 有一種大物件設置, 提供串流形式(Stream-style)存取對於使用者資料被存放在一個特別的大物件結構中。串流中的存取是有效的當工作以太大的以至於不能方便地操作整體上的資料值時。
所有大物件被安置在一張唯一系統表叫做 pg_largeobject 。PostgreSQL 並且支持存儲系統叫做 "TOAST" 那自動地存放每個表值大比唯一資料庫頁入一個間接儲藏區域。這使大物件設施部份地過時。大物件設施的一剩餘好處是, 它提供價值 2 GB 在大小, 但是 TOAST 的欄位可能是在多數 1 GB 。並且, 大物件可能任意地被修改使用比進行這樣操作高效率的使用 TOAST 的讀寫 API 。
大物件實施打破大物件"大塊(chunks)" 和存放大塊在列在資料庫。B-tree 索引保證快速的查尋正確大塊數字當做隨機存取讀和寫。
它是可能的, pg_largeobject 表將舉行一些物件資料, 但它也許不被使用任何地方在資料庫。沒有暫時修造在方法去除這 ghosts, 依照被指出在 PostgreSQL 幫助。但有想法, 這也許由 VACUUM 命令做。但是, 這種功能不被實施。
比較表
特徵 | BYTEA | OID |
---|---|---|
最大允許的空間 | 1 GB | 2 GB |
資料存取 | 整體上 | Stream-style |
儲存 | 在被定義的表裡 | 在 pg_largeobject 系統表裡 |
資料操作 | 使用 SQL 和脫逸的 sequnces | 只在事物交易區塊之內由特別函數 |
載入 | 預先 | 在要求時 |
延伸閱讀(Link):
沒有留言:
張貼留言