2010年10月8日 星期五

個人學習MongoDB後,對於document的認知

(MongoDB官方網站文件也有提到,但文件較分散)

  • A document is the basic unit of data for MongoDB, roughly equivalent to a row in a relational database management system (but much more expressive).
  • Similarly, a collection can be thought of as the schema-free equivalent of a table.
  • A single instance of MongoDB can host multiple independent databases, each of which can have its own collections and permissions.
  • MongoDB comes with a simple but powerful JavaScript shell, which is useful for the administration of MongoDB instances and data manipulation.
  • Every document has a special key, "_id", that is unique across the document’s collection.


collection很好理解但document就字面上有點難理解,但看完Java Driver運作方式後,對document我的認知如下:

MongoDB的document長像是JSON的格式,document在RDBMS上如同是一個row。 


{
    "name" : "MongoDB",
    "type" : "database",
    "count" : 1,
    "info" : { x : 203, y : 102 }
}



在mongoDB java Driver使用上要寫入如上JSON格式資料的語法如下:


//建立最外層key:value,此時還不是完整的parent document
BasicDBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
doc.put("type", "database"); doc.put("count", 1);

//建立info的sub document
BasicDBObject info = new BasicDBObject();
 info.put("x", 203);
 info.put("y", 102);

//將sub document寫入doc使其成為完整的parent document.
doc.put("info", info);

//將這個完整的parent document插入到collection,這個collection類似RDBMS的table.
coll.insert(doc);

由程式邏輯來理解
我認為由最外層來看這個結構是一個parent document
 {
    "name" : "MongoDB",
    "type" : "database",
    "count" : 1,
    "info" : { x : 203, y : 102 }
 }


//而info的value也是一個document,就是parent document裡再包含了一個sub document.

 { x : 203, y : 102 }



因此整個JSON格式就可以看成是RDBMS裡的一個row,對於想從mongoDB拿資料的程式來說這一個最外層就是一個document,而對於mongoDB自己內部來說內層那個info也是一個document。

從程式邏輯來看能理解MongoDB的資料結構了,但我無法很明白的來敘述這種關係,並且理解也可能有誤解,不過當由程式直接操作來看,document到底是什麼就變得不是那麼重要,有點張無忌學太極拳、劍,最後無招勝有招。

2010年10月7日 星期四

MnogoDB JAVA Driver配置

MongoDB Driver官方頁面
Java Driver下載頁面
本文撰寫時Java Driver最新版本為 Version2.1
Step1.下載MongoDB JAVA Driver

@ubuntu:~/Downloads$ wget http://github.com/downloads/mongodb/mongo-java-driver/mongo-2.1.jar


Step2.建立目錄mongoDriver
於/opt底下建立一個目錄以放置mongo-2.1.jar

@ubuntu:/opt$ sudo mkdir mongoDriver


Step3.將mongo-2.1.jar移至/opt/mongoDriver底下

@ubuntu:~/Downloads$ sudo mv mongo-2.1.jar /opt/mongoDriver/


Step4.開啟Eclipse,開啟一個Java Project
Step5.Libraries中Add External JARs將mongo-2.1.jar加入

//待續

Linux上配置Eclipse

Eclipse官方網址http://www.eclipse.org/
本篇將會下載 Eclipse IDE for Java EE Developers  Linux 64bit
Step1.下載Eclipse for JavaEE  Linux64版本

Step2.解開壓縮
@ubuntu:~/Downloads$ tar xzf eclipse-jee-helios-SR1-linux-gtk-x86_64.tar.gz


Step3.將解開資料夾移到/opt底下
@ubuntu:~/Downloads$ sudo mv eclipse /opt/
Step4.執行eclipse
:~/Downloads$ ./|/opt/eclipse/eclipse


本篇是強迫自己使用Shell命令操作,但在ubuntu下具有桌面環境,可以如下
Step1.直接用fireFox下載,下載完檔案預設上會存放在home下的Downloads目錄裡。
Step2.打開Downloads目錄點擊下載之檔案即可解壓。
Step3.將解壓後之目錄移至/opt底下。
Step4.在eclipse目錄底下有個eclipse執行檔,直接點擊即可開啟eclipse。
Step5.替eclipse建立捷徑在ubuntu桌面上。

2010年10月5日 星期二

mongoDB與MySQL 指令比較

閱讀紀錄
MySQL Program → Mongo Program
  • mysqld  → mongod (啟動DB)
  • mysql    → mongo    (DB連線,進入 Shell操作模式)

MySQL Statement → Mongo Statement
插入 
  • INSERT INTO users VALUES(2,3) →
    db.users.insert({a:2,b:3})

搜尋全部
  • SELECT * FROM users →
    db.users.find()
SELECT0
  • SELECT a,b FROM users →
    db.users.find({},{a:2,b:3})
SELECT1
  • SELECT * FROM users WHERE age=30 →
    db.users.find({age:30})
SELECT2
  • SELECT a,b FROM users WHERE age=30 →
    db.users.find({age:33},{a:2,b:3})


SELECT3
  • SELECT * FROM users WHERE age=30 ORDER BY name → db.users.find({age:33}).sort({name:1})
SELECT4
  • SELECT * FROM users WHERE age>30 →
    db.users.find({'age':{$gt:30}})
SELECT5
  • SELECT * FROM users WHERE age<30 →
    db.users.find({'age':{&lt:30}})
SELECT6
  • SELECT * FROM users ORDER BY name DESC → db.users.find().sort({name:-1})
建立索引
  • CREATE INDEX myindexname ON users(name) → db.users.ensureIndex({name:1})
SELECT命令7
  • SELECT * FROM users WHERE a=1 and b='q' → db.users.find({a:1,b:'q'})
SELECT命令8
  • SELECT * FROM users LIMIT 10 SKIP 20 → db.users.find.limit(10).skip(20)
SELECT命令9
  • SELECT * FROM users LIMIT 1 → db.users.findOne()
SELECT命令10
  • EXPLAIN SELECT * FROM users WHERE z=3 → db.users.find({z:3}).explain()
SELECT命令11
  • SELECT DISTINCT last_name FROM users → db.users.distinct('last_name')
SELECT命令12
  • SELECT COUNT(*y) FROM users → db.users.count()
SELECT命令13
  • SELECT COUNT(*) FROM users where AGE > 30 → db.users.find({age:{'&gt':30}}).count()
SELECT命令14
  • SELECT COUNT(AGE) FROM users → db.users.find({age:{'$exists':true}}).count()
SELECT命令15
  • UPDATE users SET a=1 WHERE b='q' → db.users.update({b:'q'},{$set:{a:1}},false,true)

MongoDB Shell 下的 基本操作指令

(文章來自mongoDB mongo - The interactive章節)
//以下命令都是進入mongoDB Shell環境下使用
//進入Shell用的Linux命令 ./bin/mongo


Special Command Helpers
Non-javascript convenience macros:
Show help
顯示最上層的幫助文件
  • >help
Show help on db methods
顯示(資料庫)db系列命令的幫助文件
  • >db.help()
Show help on collection methods
顯示(集合)myColl系列命令的幫助文件
  • >db.myColl.help()
Print a list of all databases on this server
查詢mongoDB上所有的資料庫
  • >show dbs



Set the db variable to represent usage of dbname on the server
切換資料庫
  • >use [db_name]
Print a list of all collections for current database
顯示所有的collections (mongoDB的collection 類似 MySQL的table)
  • >show collections
Print a list of users for current database
列出當前資料庫用戶
  • >show users
Print most recent profiling operations that took >= 1ms
列出最近的操作?
  • >show profile
Basic Shell Javascript Operations

//未完

MongoDB Starting the Shell

啟動mongodb的Shell環境
  • ./bin/mongo

connects to the [database] on your local machine.
連接本地端機器上的database。
  • ./mongo [database Name]
  • ./mongo testdb


connects to the [database] on 192.168.11.3

指定連接特定位址上的database
  • ./mongo [IP Address]/[database]
  • ./mongo 192.168.11.3/testdb


connects to the foo database on [domainName]
指定連接domainName上的database。
  • ./mongo [domainName]/[database]
  • ./mongo dbserver.mydomain.com/testdb

connects to the [database] on [IP Address] on [port number]
指定IP位址與使用Port number。
  • ./mongo [IP Address]:[Port Number]/[database]
  • ./mongo 192.168.11.3:7000/testbase

2010年10月4日 星期一

Linux配置mongoDB

MongoDB下載頁面
Step1.下載mongoDB
:~Downloads$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.3.tgz

Step2.解壓
~Downloads$ tar xzf mongodb-linux-x86_64-1.6.3.tgzls

Step3.更改目錄名稱
~Downloads$ mv mongodb-linux-x86_64-1.6.3 mongodb

Step4.移動資料夾至/opt
~Downloads$sudo mv mongodb /opt

Step5.建立給予mondoDB使用的資料夾
/$ sudo mkdir -p /data/db/
//mongoDB預設使用資料庫路徑為 /data/db
//linux習慣會將常變動資料置放於 /var下,因此可以將data/db移至/var下使用。
Step6.修改資料夾權限
sudo chown [檔案擁有者] [目標對象]
sudo chown jeffrey /data/db
Step7.執行MongoDB
//如此會啟動mongoDB,但需要使用另外一使用者環境,使用不同使用者登入才能操作mongoDB
./opt/mongod --dbpath=/data/db


//如此可在原本使用者環境中開啟mongoDB
 ./mongod --fork  --dbpath=/data/db --logpath=/opt/mongodb/log/mongodb.log --logappend




查詢MongoDB是否運行
  • ps -ef|greap grep mongod
查詢mongodb的Port Number是否運作
  • netstat -an -t|greap grep 28017
mongoDB預設Port是28017,再啟動時可以使用--port來指定使用port

Linux上配置TomCat6.0

連結資料:
Tomcat官網

安裝JDK:
安裝Tomcat前請先安裝好JDK
配置步驟
Step1.下載tomcat6.0
sudo wget http://apache.cdpa.nsysu.edu.tw//tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz

版本請依實際下載你所需要版本(這裡用的是Core的版本)

Step2.解壓
sudo tar xvzf apache-tomcat-6.0.29.tar.gz

Step3.目錄更名

sudo mv apache-tomcat-6.0.29 /opt/tomcat6

Step4.啟動tomcat
執行/opt/tomcat/bin/底下的startup.sh
:/opt/tomcat6/bin$ ./startup.sh

//如果執行不起來,就做第五步(檔案群組權限問題)
Step5.修改檔案群組與權限
chgrp [參數] [群組名] [檔案路徑]
  • sudo chgrp -R jeffrey /opt/tomcat

chmod [參數] [檔案權限] [檔案目標]
  • sudo chmod -R 771 /opt/tomcat6

2010年10月3日 星期日

Linux 上配置JAVA JDK

§Linux上配置JDK
Sun JAVA JDK 1.6下載頁
因為已經被Oracle吃掉所以官網改成 Oracle JAVA
Oracle Sun Java SE JDK

JDK 下載點
Java SE Development Kit 6u21
 jdk-6u21-linux-x64-rpm.bin
Java SE Development Kit 6u21
 jdk-6u21-linux-x64.bin

這篇文章是使用jdk-6u21-linux-x64.bin
Step1.下載JDK
用你習慣的方式下載JDK,由於是Ubuntu你可以直接開瀏覽器下載,用瀏覽器直接下載可以在home/Downloads裡看到jdk-6u21-linux-x64這個檔案,你也可在命令列中使用wget命令來下載,如


:~/Downloads$ wget -O jdk-6u21-linux-x64.bin http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u21-linux-x64.bin?BundledLineItemUUID=F6qJ_hCxDsYAAAErUi0F_HEN&OrderID=.VqJ_hCx4egAAAErOS0F_HEN&ProductID=xKiJ_hCySHIAAAEpT7wzBGsB&FileName=/jdk-6u21-linux-x64.bin


wget -O jdk-6u21-linux-x64.bi如此可以將下載後的檔案存成 jdk-6u21-linux-x64.bin

Step2.將檔案移至/opt中
:~/Downloads$ sudo mv jdk-6u21-linux-x64.bin /opt

過程中會問你管理者密碼,輸入後即可搬移


Step3.更改檔案權限

:/opt$ chmod +x jdk-6u21-linux-x64.bin 

Step4.解壓縮
:/opt$ sudo ./ jdk-6u21-linux-x64.bin 


這個檔案執行後會自解壓縮,以上執行完畢可以在opt下看到一個jdk1.6.0_21的資料夾。

Step5.建立Java資料夾
  • :/opt$ sudo mkdir java
Step6.將jdk1.6.0_21移到java資料夾下
此步可以省略,只是個人習慣,方便日後若是有java系列的東西方便放一起管理,例如JRE。
  • /opt$ sudo mv jdk1.6.0_21 java
Step7.設定環境變數
  • :/opt$ sudo nano /etc/profile

  • :/opt$ sudo gedit /etc/profile
在文件最尾端輸入
#java environment 
export JAVA_HOME=/opt/java/jdk1.6.0_21
export CLASSPATH=.:./classes:../classes:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin


Step8.
  • source /etc/profile
Step9.重新啟動Linux

Step10.測試java是否啟動







~$ java -version







參考資料
http://tsjianxin.blog.51cto.com/1309817/355384
http://tw.myblog.yahoo.com/jw!q5yoQbKZG0AAcnvqqbxB/article?mid=16
http://tech.techweb.com.cn/thread-226426-1-1.html
http://doflower.blogspot.com/2009/05/linuxjava-classpath.html
http://freelon.pixnet.net/blog/post/30820017


關於環境變數的profile檔功用可以參考鳥哥網站,鳥哥介紹的很清楚真是功德無量
http://linux.vbird.org/linux_basic/0320bash.php#settings_bashrc