天天看點

掃描器架構分析之redis+分布式+mongodb

掃描器架構分析之redis+分布式+mongodb

名詞解釋-Redis

“什麼是redis和分布式和mongodb,他們的功能是什麼?”

Redis是什麼

Redis的的是完全開源免費的,遵守BSD協定,是一個高性能的鍵值資料庫。是目前最熱門的的的NoSql資料庫之一,也被人們稱為資料結構伺服器,,因為值(value)可以是 字元串(String), 哈希(Hash), 清單(list), 集合(sets) 和 有序集合(sorted sets)等類型。

掃描器架構分析之redis+分布式+mongodb

Redis有什麼功能

Redis支援資料的持久化,可以将記憶體中的資料儲存在磁盤中,重新開機的時候可以再次加載進行使用。

Redis不僅僅支援簡單的key-value類型的資料,同時還提供list,set,zset,hash等資料結構的存儲。

Redis支援資料的備份,即master-slave模式的資料備份。

本質就是非阻塞送出方式,支援多地送出,而傳統資料庫伺服器會阻塞。

掃描器架構分析之redis+分布式+mongodb

案例

批量導入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最大的特點是它支援的查詢語言非常強大,其文法有點類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。

掃描器架構分析之redis+分布式+mongodb

Mongodb有什麼功能

Config server 的 Primary 節點負責負載均衡

MongoDB 3.2及以前版本裡,分片叢集的負載均衡由 mongos 負責,多個 mongos 會搶一個分布式鎖,搶鎖成功的 mongos 會對執行負載均衡任務,在 shard 間遷移 chunk;在3.4版本裡,負載均衡将由 Config server 的 Primary 節點負責,預計會在負載均衡并發度及效率上會有大的提升。

掃描器架構分析之redis+分布式+mongodb

案例

讀取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

掃描器設計加入redis+mongodb大體是如下圖所示:

掃描器架構分析之redis+分布式+mongodb

具體分布式可以參考celery官方API文檔的說明

掃描器架構分析之redis+分布式+mongodb