mongodb group by

SQL-to-MongoDB2
目前在日常生活偶爾會使用 mongodb 做一些開發或存一些 log,除了基本的 json query 以外,偶爾需要用到如 mysql 的 group 功能,剛開始覺得好像沒有辦法直接用 query 做很困擾,實際做過一次複雜的 query 以後才發現 mongodb 的彈性實在是強大不少,除了語法不相容要重學以外。

舉一個實際的例子,有一個表存了 web 的 access log,然後想找到哪個頁面(page)最常被存取,按照頁面的存取次序排序,每一個人在一天存取同個頁面多次都只能算一次(不重複的工作階段 in GA),而且要排除特定 IP 不被計算(自己)。

在 SQL 裡面直覺寫出來大概會是這樣:

SELECT page, count(*) count FROM access_log 
WHERE IP != '192.168.1.1' 
GROUP BY page
ORDER BY count DESC
limit 10

雖然簡單,但是這個寫法沒有過濾掉,不重複計算同個人的重複瀏覽,所以直覺也是用子查詢才能解決這個問題。
Continue reading…

datastax Brisk 的故事…

去年(2011)初 Datastax 這間在做 Cassandra 顧問服務的公司,推出了一個 opensource 的整合方案 brisk,主要著力點在 CassandraFS 在 Cassandra 上實作了一層與 hdfs 相容 api 的檔案系統,用以銜接 hadoop 相關的服務 hive、pig、MapReduce。而且還有一個比較漂亮的 web 監控與管理介面 opscenter。
Continue reading…

資料庫擴展

MySQL Cluster 、HBase、Cassandra

該怎麼知道自己的應用適合什麼軟體,自行架設的環境是否有達到想像的能力呢?

那就自行架設測試環境來對這些細節做測試吧!

測試什麼?

硬碟 io、連線承受數、每秒讀取寫入數量。

sysstat:

系統狀況讀取軟體,內有附 iostat 可以測硬碟瞬間讀寫的速度。

MySQL:

http://mysqldatabaseadministration.blogspot.com/2006/08/mysql-benchmarking-1.html

使用 MySQL 5.1 之後內建的 mysqlslap 來模擬大量用戶連線。

./bin/mysqlslap –host=antslab.tw –user=user -p -a –auto-generate-sql-guid-primary –auto-generate-sql-load-type=mix –auto-generate-sql-unique-query-number=5 –auto-generate-sql-unique-write-number=6 –auto-generate-sql-secondary-indexes=4 –concurrency=100 –create-schema=test –auto-generate-sql-execute-number=10011

參數解釋 http://jingstory.com/tag/mysqlslap

 

cassandra and django and twissandra

一個完整簡潔有力的學習專案,twissandra 用 django 與 cassandra 實作 twitter 最簡單重要的功能,有網頁介面。

此專案展示了 cassandra 資料模型的設計以及 API 的使用,又能大略學習 django 的簡單使用,安裝與運作又十分容易,

後端 API 是採用 high level api pycassa ,原先是 Thrift ,而透過 pycassa 做中介層,幫忙做一些控管讓資料存取更順暢。

資料來源

  1. twissandra https://github.com/ericflo/twissandra
  2. pycassa https://github.com/pycassa/pycassa
  3. django http://djangoproject.com