background preloader

Google App Engine

Facebook Twitter

Google GFS文件系统深入分析(1) 51CTO编辑注:本文是一篇论文,英文原文标题为The Google File System,在Google Labs上公布,由blademaster.ixiezi.com的博主Alex翻译为中文,Google GFS文件系统。

Google GFS文件系统深入分析(1)

Distributed Key-Value Database. 這篇是因為在 PIXNET 內講了 n 次,決定寫成文字,至少之後新人進來可以說「就看這篇」,避免整套系統都需要重新講一次。

Distributed Key-Value Database

對了,補充一下,PIXNET 還是有缺人,參考「缺人找人」這篇的內容,如果有想問的細節,可以寫信問我。 資料庫 在 RDBMS 提供了很多而且很豐富的操作方式,但當資料量愈來愈大時,會遇到單台機器的網路頻寬有限以及空間有限。 這時候一定得走向多台的架構。 Replication 最容易解決的情況是「讀取的 query 比寫入的 query 多」,可以用 database replication 解決,這也是 Web 1.0 網站常見的解法之一 (另外一種常見的解法是使用靜態檔案,或是 reverse proxy cache),同步將資料複製到多台。 Memcached 接下來會發現當 slave 過多時會造成每台記憶體內重複 cache 相同的元素,也就是說,有二十台 slave,每台都有 SELECT * FROM `user` WHERE `name` = 'gslin' 的結果其實很浪費資源。 Sharding 在 Web 2.0 的環境裡,User generated content 成為主流,當寫入的 query 超過單台可以負荷的量時,replication 的架構就不是很適合了,因為每個寫入的 query 在其他台 slave 上也會被執行。 比較常見的解法是 sharding:依照 id,把資料拆散到各台。 但 sharding 就會少了很多 RDBMS 可以用的特性 (JOIN 與 transaction),在寫 application server 或是 library 的時候得花功夫多下幾次 query,並且注意資料的正確性。 上面這些方法在 2005 年 Brad Fitzpatrick (LiveJournal founder、memcached 作者) 的投影片「LiveJournal’s Backend: A history of scaling」都有提到。

Sharding 是一個解法,但有不少缺點: 需要 application server 或是 library,否則 3rd party 程式得清楚知道 sharding 的架構,才會知道資料要到哪個 cluster 找。 Alex && OpenCould » Bigtable:一个分布式的结构化数据存储系统[中文版] Ken Yang 筆記: Android C2DM (一):元件參數說明. [AppEngine] 實戰 Datastore (1) 其實這些都可以在官方文件及 Google IO 的 slides 裡找到,不過我就幫大家整理一下(並且用中文說 XD)。

[AppEngine] 實戰 Datastore (1)

Google App Engine 帶給大家一個新的資料儲存概念,就是 Datastore 這個東西,它跟一般的關聯式資料庫(RDB)的概念相差不少,從官方文件或是 Google 工程師的演講中都不斷強調要大家用新的思維去想這個資料儲存方式,而不要一直侷限於怎麼把 RDB 的那一套搬過來。 不過好在 Datastore API 在描述資料的 Model 或 Expando 的資料欄位上提供了不少好用的資料型別(data type),所以一些常用的關聯還是很容易可以完成。 這篇就介紹幾個常用的關聯,在 Datastore 上要怎麼下手。 One-to-One & One-to-Many 通常會用到這個關聯,就是 A model 中有個 column 的值可能是一個串列,在 RDB 中我們可能就會再建立一個 B model,然後在 B 中設下一個 A_id 的 column 用來指向 A 的某個 row,但是在 Datastore 中沒有 join 運算,所以得換個方法來做。 假設我在建立一個通訊錄的 Model,一個人可能會有很多 E-Mail,我的 model (在 Datastore 中)就可以寫成這樣: class User(db.Model): name = db.StringProperty(required=True) class Email(db.Model): user = db.ReferenceProperty(User, collection_name='emails') addr = db.EmailProperty(required=True) mail_type = db.StringProperty() 在 Email model 中,用了一個 Reference 型別的欄位,用來表示這個欄位是 reference 到 User 這個 model,並且在 User 下建立一個集合,名為 emails,用來表示所有的 references。

所以我在建立 Entity 的時候就可以這樣做: ericsk = User(name='Lin-Chieh Shangkuan') ericsk.put() Many-to-Many 參考文獻: 發表 App Engine 的 High Replication Datastore. Google App Engine (04) - Datastore. 伺服器廣播程式範例 - 國立金門大學 九十六學年度資訊工程學系專題 Android教學範例. If you want to discuss contents of this page - this is the easiest way to do it.

伺服器廣播程式範例 - 國立金門大學 九十六學年度資訊工程學系專題 Android教學範例

Click here to edit contents of this page. Click here to toggle editing of individual sections of the page (if possible). Watch headings for an "edit" link when available. Append content without editing the whole page source. Check out how this page has evolved in the past. View and manage file attachments for this page. A few useful tools to manage this Site. Change the name (also URL address, possibly the category) of the page. View wiki source for this page without editing. View/set parent page (used for creating breadcrumbs and structured layout).

Notify administrators if there is objectionable content in this page. Something does not work as expected? General Wikidot.com documentation and help section. Wikidot.com Terms of Service - what you can, what you should not etc. Wikidot.com Privacy Policy. This wizard will create an empty table with the specified properties: This wizard will create an URL (web address) link:

手機連線程式範例 - 國立金門大學 九十六學年度資訊工程學系專題 Android教學範例. If you want to discuss contents of this page - this is the easiest way to do it.

手機連線程式範例 - 國立金門大學 九十六學年度資訊工程學系專題 Android教學範例

Click here to edit contents of this page. Click here to toggle editing of individual sections of the page (if possible). Watch headings for an "edit" link when available. Append content without editing the whole page source. Check out how this page has evolved in the past. PaperReading: Bigtable: A Distributed Storage System for Structured Data @ [todo Austin] 奧斯丁。土豆. Google App Engine 之 Python 與 BigTable. 上星期 5 (2008/06/27) 從朋友那裡得知有「Google App Engine」這個新的服務後,就開一連串對這個新服務的研究與測試。

Google App Engine 之 Python 與 BigTable

Google App Engine 價位調整 - 2011. Google 最近將 GAE 的價位做了調整, 價位如此頁: Google App Engine - Pricing and Features , 但是光看此頁並不會有任何感覺.

Google App Engine 價位調整 - 2011

Google App Engine 價位調整 整理 有聽到不少哀號聲, 但是直接看 Dashboard 好像都沒有什麼變化, 就先不理他了. 沒想到昨天收到通知信, 說我需要去重新調整 Budget, 因為使用量超過, 再仔細查看後, 看到價位後, 會想是不是看錯了, 還要確認這是寫台幣還是美金. 價位調整前的價格: 價位調整後的價格: 註: 這個價格是1天, 美金計價. 看到兩者最大的差別是在把 CPU time 拿掉, 換成 Frontend Instance, 然後這個大爆炸. 除此之外, 另一個最嚴重的是 Datastore Write / Read, 直接在 Dashboard 看到如下: Datastore Write Operations - 0.05 of 0.05 Million OpsDatastore Read Operations - 0.05 of 0.05 Million Ops 依照這種算法, 一天對 DB 的讀寫操作只能 5萬次, 這個在一般 RDBMS 看起來好像還好, 但是這是 key-value 的 nosql DB, 5萬次有給跟沒給差不多意思.

舉個例子來說, 假設是個 Blog 站, 首頁一次列 10篇文章 在加上其他的也算 10就好了, GAE 至少就要拉 20次, 所以 PageView 2500 就爆表了, 而這個價位也不便宜就是了. 結論. Cloud services – App Engine.

For java

For python.