2015年12月29日 星期二

ORM解釋

本文內容主要引用(http://tw.gigacircle.com/2703563-1)

物件關聯對映(Object Relational Mapping,簡稱ORM) 是一種用於實現從物件資料到關聯資料的存儲對映的程式設計技術,將資料庫操作用物件導向的形式來呈現。

ORM支援基本的SQL查詢及附加子句設定,可進行各種關聯式查詢,透過物件間的關聯設定,達成一對一、一對多、多對多的關聯查詢,使查詢更具彈性及明確性。在設定關聯對映時有各種方式,主要須視程式語言類型進行設計,以編譯式程式語言Java的Hibenate為例,Hibenate以XML格式作為配置文件,定義各種物件之間的關聯等資訊。各種 ORM 的技術都有共同的目的,就是能把物件的狀態存到關聯式資料庫。

ORM可以操作和控制數據庫數據的PHP 對象。一旦你定義了關系 ORM 它會允許你從數據庫中讀取任何數據,以你喜歡的方式來控制數據,並把結果保存到數據中而中間不再使用 SQL 語句。許多人都知道ORM的優點來自於隱藏SQL語句及物件呈現上,也可以說是ORM自動產生SQL指令,而因自動產生技術的成熟度及對該資料庫的了解度,因此ORM在某些地方效率低落是必然的。所以,高效率並不是ORM所標榜的優點,維持一定程度效率才是,且自動產生的機制是可以被持續優化的。

ORM多支援Stored Procedure的對應,用這種方式來進行批次更新,是ORM的既定標準手法。採用ORM的優點除了「跨資料庫」、「自動產生SQL」外能夠以一致的方法,把複雜的物件設計對應到關聯式的世界我想才是它的重點。若是拿直接存取 Database與採用 ORM 技術這兩者來做比較,ORM 因為多卡了一層一定會比較慢一些些,但是採用 ORM 技術有很多機會可以調校(Tuning),例如資料快取(Caching)、定義查詢計畫(Query Plan)等,且最重要的是數據庫類的查詢器中的大多數方法都可以在 ORM 模型中使用。

ORM其目的是企圖幫助開發者從物件導向程式開發的角度,單純地思考類別之間的繼承及參照關係,而不需要知道實體的資料是如何分散在不同的資料表,以及物件背後對應哪些資料表,甚至SQL指令的組成,也交由平臺處理。換句話說ORM的目的在於減少SQL指令跟主程式之間的藕合性,採用集中管理或是代理操作機制來讓程式碼與關聯式資料庫間溝通,開發者只要透過原來在使用的開發語言,不必接觸到實際的SQL,就能夠完成增、刪、改、查等跟資料庫之間的操作,不但減少了開發的時間,也降低的以後維護的成本。

歸納後ORM有下列之優點:

  1. 以物件表現列、以屬性表現欄,使用物件導向程式設計的概念來操作資料庫。
  2. 隱藏SQL語法,以達到跨不同的資料庫系統時,不需修改應用程式。
  3. 使用相同的語法,操作各種資料庫系統,減輕開發人員的學習負擔。
  4. 自動產生SQL語法,避免因程式設計師能力不同,寫出效率不彰的應用程式。
  5. 自動產生SQL語法,避免程式設計師對安全性的認知程度不同,寫出不安全的應用程式。



本研究中的框架所提供的ORM,除了具備上述之SQL查詢以外,還提供ORM的延伸應用可針對其他資料儲存型態進行管理,如XML、JSON,可作為其他資料交換等用途。

2015年12月8日 星期二

docker設定 - 暫存資料

docker setting

path : /etc/default/docker"


conf

# Docker Upstart and SysVinit configuration file

# Customize location of Docker binary (especially for development testing).
#DOCKER="/usr/local/bin/docker"

# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="-D --tls=false -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=192.168.2.18:5000"

# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"

# This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"



insecure-registry