掃描器架構分析之redis+分布式+mongodb
名詞解釋-Redis
“什麼是redis和分布式和mongodb,他們的功能是什麼?”
Redis是什麼
Redis的的是完全開源免費的,遵守BSD協定,是一個高性能的鍵值資料庫。是目前最熱門的的的NoSql資料庫之一,也被人們稱為資料結構伺服器,,因為值(value)可以是 字元串(String), 哈希(Hash), 清單(list), 集合(sets) 和 有序集合(sorted sets)等類型。
Redis有什麼功能
Redis支援資料的持久化,可以将記憶體中的資料儲存在磁盤中,重新開機的時候可以再次加載進行使用。
Redis不僅僅支援簡單的key-value類型的資料,同時還提供list,set,zset,hash等資料結構的存儲。
Redis支援資料的備份,即master-slave模式的資料備份。
本質就是非阻塞送出方式,支援多地送出,而傳統資料庫伺服器會阻塞。
案例
批量導入URL和讀取URL:
——————————————————————————————————
import java.util.List;
import redis.clients.jedis.Jedis;
public class RedisListJava {
public static void main(String[] args) {
//連接配接本地的 Redis 服務
Jedis jedis = new Jedis("localhost");
System.out.println("連接配接成功");
//存儲資料到清單中
jedis.lpush("url", "https://www.test.com");
jedis.lpush("url", " https://www.test.com ");
jedis.lpush("url", " https://www.test.com ");
// 擷取存儲的資料并輸出
List<String> list = jedis.lrange("url", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("清單項為: "+list.get(i));
}
}
}
複制
名詞解釋-Mongodb
Mongodb是什麼
MongoDB是一個介于關系資料庫和非關系資料庫之間的産品,是非關系資料庫當中功能最豐富,最像關系資料庫的。它支援的資料結構非常松散,是類似json的bson格式,是以可以存儲比較複雜的資料類型。Mongo最大的特點是它支援的查詢語言非常強大,其文法有點類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。
Mongodb有什麼功能
Config server 的 Primary 節點負責負載均衡
MongoDB 3.2及以前版本裡,分片叢集的負載均衡由 mongos 負責,多個 mongos 會搶一個分布式鎖,搶鎖成功的 mongos 會對執行負載均衡任務,在 shard 間遷移 chunk;在3.4版本裡,負載均衡将由 Config server 的 Primary 節點負責,預計會在負載均衡并發度及效率上會有大的提升。
案例
讀取mongodb資料:
———————————————————————————————————————
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
public class MongoDBJDBC{
public static void main( String args[] ){
try{
// 連接配接到 mongodb 服務
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 連接配接到資料庫
MongoDatabase mongoDatabase = mongoClient.getDatabase("zijiemaibo");
System.out.println("Connect to database successfully");
MongoCollection<Document>collection= mongoDatabase.getCollection("yexingzijie");
System.out.println("集合 test 選擇成功");
//檢索所有文檔
/**
* 1. 擷取疊代器FindIterable<Document>
* 2. 擷取遊标MongoCursor<Document>
* 3. 通過遊标周遊檢索出的文檔集合
* */
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}
複制
———————————————————————————————————————
周遊結果:
Connect to database successfully
集合 yexingzijie選擇成功
Document{{_id=sqwegag15a6e65f92, title=MongoDB, description=database, likes=100, by=Fly}}
掃描器設計加入redis+mongodb大體是如下圖所示:
具體分布式可以參考celery官方API文檔的說明