postgresql存图片字段类型_PostgreSQL让人着迷的多态性,另辟蹊径省时又省力
PostgreSQL 讓人著迷的地方,不在于他比某些數(shù)據(jù)庫(kù)的流行,也不在于比某些數(shù)據(jù)庫(kù)的高“貴”, 更不如某些數(shù)據(jù)庫(kù)的“簡(jiǎn)單”。Postgresql 讓人無(wú)法自拔的是他的”多端變化”, 用開發(fā)的角度來(lái)說(shuō),叫多態(tài)性。
PG本身支持著太多的數(shù)據(jù)的類型充分體現(xiàn)了他的多態(tài)性,其中hstore數(shù)據(jù)類型,這是一種以鍵值為目的的數(shù)據(jù)存儲(chǔ)和提取的方式。在非結(jié)構(gòu)化,半結(jié)構(gòu)化數(shù)據(jù)橫行的今天,除了MONGODB 讓人“羨慕嫉妒恨”,以外能想到的好像也只有PG了,在支持json, josnb下的PG另類hstore數(shù)據(jù)類型是否多余,還是對(duì)多種應(yīng)用提供了更良好的支持,的需要去check一下。
先建立一個(gè)POSTGRESQL 的hstore類型,是騾子,還是千里馬,的出來(lái)溜溜。
我們插入一條數(shù)據(jù)
insert into hstore_test (id,name,history) values (1,'postgresql','from => "IBM_Research",origination => "inges",time => "1970"')
可以看到與JSON 格式對(duì)比,hstore 在處理比較隨意的數(shù)據(jù)上,也是有點(diǎn)意思。
SELECT name, history->'from' as history FROM hstore_test WHERE history->'origination' = 'inges';
想必做到這里,如果是開發(fā)人員,會(huì)覺得有點(diǎn)意思,并且是騾子,是千里馬,反正不是“驢”。從開發(fā)人員的角度,這樣處理數(shù)據(jù)的方式,鍵值不要太隨便。
說(shuō)道這時(shí)候,估計(jì)馬上會(huì)有人跳出來(lái),這不科學(xué)呀,這怎么加索引,這怎么在大數(shù)據(jù)量下查詢,這就是“兒戲”。
普及一下POSTGERSQL 的“科學(xué)”, 因?yàn)镻OSTGRESQL 的索引類型從來(lái)不貧瘠, GIN GIST 索引類型,妥妥的支持這樣變態(tài)的類型,一個(gè)能讓%like% ,都能走索引,百萬(wàn)數(shù)據(jù)毫秒出結(jié)果的數(shù)據(jù)庫(kù),怕過誰(shuí)。
那具體在數(shù)據(jù)庫(kù)的維度上,問題的關(guān)注點(diǎn)可能會(huì)轉(zhuǎn)移到,是否有什么案例可以說(shuō)明這個(gè)數(shù)據(jù)庫(kù)的字段類型(或許叫字段類型表達(dá)不了,這個(gè)類型的內(nèi)涵),在實(shí)際當(dāng)中的意義。
首先有需要聲明
這個(gè)類型不是要代替或者與JSON 類型進(jìn)行競(jìng)爭(zhēng),換句話hstore 類型是JSON,JSONB 的一種有益的補(bǔ)充,當(dāng)你在產(chǎn)生某些數(shù)據(jù)的情況下,無(wú)法對(duì)其進(jìn)行合理的二維表格以及關(guān)系的描述,或者你的數(shù)據(jù)不存在嵌套的關(guān)系,或需要處理復(fù)雜的嵌套關(guān)系。在這樣的情況下還有一些,非傳統(tǒng)的二維表格的需求。hstore 其實(shí)是一個(gè)很好的補(bǔ)充和支持。
那下面就舉一個(gè)例子:
例如我們有一個(gè)在線介紹家用汽車的網(wǎng)站,我們其中的每種汽車,其實(shí)都可能有很多熟悉
我們一邊建表,一邊來(lái)舉這個(gè)例子
create table car_info(
id serial primary key,
productor varchar(20),
car_name varchar(50),
product_time timestamp,
car_type smallint,
tag hstore
);
這里hstore存儲(chǔ)的數(shù)據(jù)其實(shí)是可以通過json + mongodb的方式來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),毋庸置疑的是MONGODB 在JSON處理上的能力,以及便捷性,尤其對(duì)待要求數(shù)據(jù)量巨大,并且對(duì)處理的速度要求很高的情況下,MONGODB可以說(shuō)是JSON里面的唯一選項(xiàng)。
那這里POSTGRESQL的 hstore 扮演了一個(gè)什么樣的角色
1 在傳統(tǒng)數(shù)據(jù)庫(kù)表里面會(huì)涉及到一些,非結(jié)構(gòu)化的數(shù)據(jù)
2 在某些需求不明確,但需要為了爭(zhēng)取市場(chǎng),快速上線(比如這個(gè)tag ,其實(shí)可能需求方面會(huì)一直變化,某一種車的標(biāo)簽會(huì)隨著市場(chǎng),銷售情況,以及車商,等等諸多原因進(jìn)行變化,而使用其他數(shù)據(jù)庫(kù)的任何字段類型來(lái)處理這樣的情況要不就是不合適,要不就是太麻煩)
3 所以postgresql 的 hstore 是在數(shù)據(jù)量較少,介于想使用MONGODB,但又沒有特別大的需求和數(shù)據(jù)量的情況下,需要靈活應(yīng)對(duì)項(xiàng)目中的需求變動(dòng)頻繁時(shí)的一個(gè)好的技術(shù)方法,來(lái)規(guī)避后期的頻繁改動(dòng)表結(jié)構(gòu),字段長(zhǎng)度,以及一些,讓需求,開發(fā),運(yùn)維都頭痛的后續(xù)工作。
所以POSTGRESQL 的 hstore 是一個(gè)在傳統(tǒng)數(shù)據(jù)庫(kù)中,非結(jié)構(gòu)化,半結(jié)構(gòu)化的良好的解決方案。
我們還可以在這個(gè)字段上加索引,并且方便的更新,或刪除數(shù)據(jù),這些功能在其他的數(shù)據(jù)庫(kù)上是很難相信能夠做到的。
當(dāng)然這個(gè)類型還有很多的功能,感興趣的可以去check 一下,也許會(huì)在某些項(xiàng)目上幫到你,快速的滿足需求,并且省時(shí)省力, 借用《我的前半生》,賀函風(fēng)格的一句話, 作為一個(gè)DB的工作者, 你的職責(zé)是服務(wù)于你的公司,提供專業(yè)的,更高效的數(shù)據(jù)庫(kù)去為企業(yè)服務(wù),加速程序開發(fā)速度,降低開發(fā)中程序員遇到的困難,并解決他,哪種數(shù)據(jù)庫(kù)不是重點(diǎn),重點(diǎn)是解決問題。
總結(jié)
以上是生活随笔為你收集整理的postgresql存图片字段类型_PostgreSQL让人着迷的多态性,另辟蹊径省时又省力的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强12的猪左有多少无视物攻
- 下一篇: DNF守护者祭坛机械牛那关困难怎么打啊,