2014年5月9日 星期五

file system tradeoffs

有關檔案系統諸多設計取捨的優缺點摘要:

A.硬碟目錄結構(directory structure)的發展歷史:
1.一代單層(不利同名及分群)
2.二代雙層(仍不利分群)
3.三代樹(不利分享)
4.四代無循環圖形(利於分享)

註:系統要如何避免無循環圖形(acyclic graph)變成一般圖形(general graph),而造成不利走訪?
   解法為只允許一個實連結,其餘採虛連結(捷徑),走訪時忽略虛連結.

B.網路檔案系統協定能作到斷線復原快的作法分類:
1.有狀態(stateful):  建立會談耗時,但之後的額外資料傳輸量少,且安全.其復原快的原因為雙方皆留存斷線前狀態
2.無狀態(stateless): 不建立會談省時,但之後為了自給自足,額外資料傳輸量多,且不安全.其復原也快的原因為雙方根本沒有什麼狀態要復原

C.網路檔案系統協定有關檔案修改一致性(consistency semantics)的作法分類:
1.unix一致性(unix semantics): 修改馬上他人可見,因只有一份,故取用慢
2.會談一致性(sesseion semantics): 修改要稍後開始的會談才可見,因有多份,故取用快
3.唯讀一致性(immutable-shared-files semantics): 唯讀不能修改,故具一致性

參考:
silberschatz-13-wiley-operating system concepts, 9th ed.

2014年5月3日 星期六

how to set up mahout 0.5 taste-web web service

mahout 0.5 taste_web網站服務建置法 
----------------------------------

前言:

 因為mahout新版不再提供taste_web網站服務建置範例,
 ssaroha特將mahout 0.5版的taste_web範例置於如下github網站,方便參考:
  https://github.com/ssaroha/mahout-recommender-webservice

 其目錄結構如下:
  ./mahout-recommender-service/
    .git/
    README  # 安裝說明
    create_service.sh # 建立新推薦網站服務指令
 mvn archetype:generate \
     -DarchetypeGroupId=org.apache.maven.archetypes \
     -DarchetypeArtifactId=maven-archetype-webapp \
     -DgroupId=com.mykidscart.mahout_service \
     -DartifactId=mahout_service \
     -Dpackage=com.mykidscart.mahout_service \
     -Dversion=1.0.0 \
     -DjarName=mahout_service \
     -Dsource=1.6 \
    mahout_service/
      pom.xml
      src/main/webapp/WEB-INF/web.xml # web-app/servlet/init-parm/parm-value決定推薦器
      src/main/java/com/mykidscart/mahout_service/RecommenderServlet.java
      src/main/resources/movies.dat # 3952 movies
      src/main/resources/ratings.dat # 1M movie ratings of 6K users
      target/mahout_service.war

  預設推薦器為org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommender

以下為復原taste_web範例步驟:

 # 建立git用戶身份,可作可不作
 # git config --global user.name "yyy zzz"
 # git config --global user.email "xxxx@gmail.com"
 # git config --global credential.helper cache
 # git config --global credential.helper "cache --timeout=3600"

 # 在當前目錄復原 ./mahout-recommender-service/ 架構
 git clone https://github.com/ssaroha/mahout-recommender-webservice.git

 # 產生 target/mahout_service.war
 cd ./mahout-recommender-service/
 mvn package

 ### 添加資料檔供讀取
 cp src/main/resources/movies.dat target/classes/org/apache/mahout/cf/taste/example/grouplens/
 cp src/main/resources/ratings.dat target/classes/org/apache/mahout/cf/taste/example/grouplens/
 mvn package

 ######## 測試法1: jetty ##############
 # 導入jetty插件,提供.war執行功能
 vi pom.xml
   <project>
     <build>  
       <plugins>
         <plugin>
           <groupId>org.mortbay.jetty</groupId>
           <artifactId>jetty-maven-plugin</artifactId>
           <version>7.1.2.v20100523</version>
           <configuration>
             <webApp>${project.build.directory}/${project.artifactId}.war</webApp>
           </configuration>
         </plugin>
       </plugins>
     </build>
   </project>

 # 用jetty啟動.war推薦服務
 mvn -Djetty.port=7070 jetty:run-war

 # 用瀏覽器測試推薦服務
 lynx http://localhost:7070/RecommenderServlet?userID=111&howMany=400

 ######## 測試法2: tomcat ##############
 # 部署 mahout_service.war 到 tomcat 網站
 # cp ./target/mahout_service.war  apache-tomcat-7.0.28/webapps/
 # unzip  -d mahout_service ./mahout_service.war
 
 cp ./target/mahout_service.war /usr/share/tomcat6/webapps/
 # unzip  -d mahout_service ./mahout_service.war

 # 用瀏覽器測試推薦服務
 lynx http://localhost:8080/mahout_service/RecommenderServlet?userID=111&howMany=400
 5.5 3233
 5.3458047 557
 5.0 134
 5.0 1434
 4.93471 3245
 4.899492 2503
 4.816771 2198
 4.815301 3888
 4.788968 53
 4.77251 787
 4.75434 3338
 .....