操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    MongoDB 是最早熱門非關系數據庫的之一,使用也比較普遍,一般會用做離線數據分析來使用,放到內網的居多。由于很多公司使用了云服務,服務器默認都開放了外網地址,導致前一陣子大批 MongoDB 因配置漏洞被攻擊,數據被刪,引起了人們的注意,感興趣的可以看看這篇文章:場屠戮MongoDB的盛宴反思:超33000個數據庫遭遇入侵勒索,同時也說明了很多公司生產中大量使用mongodb。

    MongoDB 簡介

    MongoDB(來自于英文單詞“Humongous”,中文含義為“龐大”)是可以應用于各種規模的企業、各個行業以及各類應用程序的開源數據庫。基于分布式文件存儲的數據庫。由C++語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。MongoDB 是一個高性能,開源,無模式的文檔型數據庫,是當前 NoSql 數據庫中比較熱門的一種。

    MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似 json 的 bjson 格式,因此可以存儲比較復雜的數據類型。MongoDB 最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

    傳統的關系數據庫一般由數據庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB 是由數據庫(database)、集合(collection)、文檔對象(document)三個層次組成。MongoDB 對于關系型數據庫里的表,但是集合中沒有列、行和關系概念,這體現了模式自由的特點。

    MongoDB 中的一條記錄就是一個文檔,是一個數據結構,由字段和值對組成。MongoDB 文檔與 JSON 對象類似。字段的值有可能包括其它文檔、數組以及文檔數組。MongoDB 支持 OS X、Linux 及 Windows 等操作系統,并提供了 Python,PHP,Ruby,Java及 C++ 語言的驅動程序,社區中也提供了對 Erlang 及 .NET 等平臺的驅動程序。

    MongoDB 的適合對大量或者無固定格式的數據進行存儲,比如:日志、緩存等。對事物支持較弱,不適用復雜的多文檔(多表)的級聯查詢。文中演示 Mongodb 版本為 3.5。

    MongoDB 的增刪改查

    Spring Boot 對各種流行的數據源都進行了封裝,當然也包括了 Mongodb,下面給大家介紹如何在 Spring Boot 中使用 Mongodb:

    1、pom 包配置

    pom 包里面添加 spring-boot-starter-data-mongodb 包引用

    <dependencies>
    	<dependency> 
    	    <groupId>org.springframework.boot</groupId>
    	    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    	</dependency> 
    </dependencies>
    

    2、在 application.properties 中添加配置

    spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test
    

    多個 IP 集群可以采用以下配置:

    spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database
    

    2、創建數據實體

    public class User implements Serializable {
            private static final long serialVersionUID=-3258839839160856613L;
            private Long id;
            private String userName;
            private String passWord;
    
          //getter、setter省略
    }
    

    3、創建實體的增刪改查操作

    Repository 層實現了 User 對象的增刪改查

    @Component
    public class UserRepositoryImpl implements UserRepository {
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
        /**
         * 創建對象
         * @param user
         */
        @Override
        public void saveUser(User user) {
            mongoTemplate.save(user);
        }
    
        /**
         * 根據用戶名查詢對象
         * @param userName
         * @return
         */
        @Override
        public User findUserByUserName(String userName) {
            Query query=new Query(Criteria.where("userName").is(userName));
            User user=mongoTemplate.findOne(query , User.class);
            return user;
        }
    
        /**
         * 更新對象
         * @param user
         */
        @Override
        public long updateUser(User user) {
            Query query=new Query(Criteria.where("id").is(user.getId()));
            Update update=new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
            //更新查詢返回結果集的第一條
            UpdateResult result=mongoTemplate.updateFirst(query,update,User.class);
            //更新查詢返回結果集的所有
            // mongoTemplate.updateMulti(query,update,UserEntity.class);
            if(result!=null)
                return result.getMatchedCount();
            else
                return 0;
        }
    
        /**
         * 刪除對象
         * @param id
         */
        @Override
        public void deleteUserById(Long id) {
            Query query=new Query(Criteria.where("id").is(id));
            mongoTemplate.remove(query,User.class);
        }
    }
    

    4、開發對應的測試方法

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserDaoTest {
    
        @Autowired
        private UserDao userDao;
    
        @Test
        public void testSaveUser() throws Exception {
            UserEntity user=new UserEntity();
            user.setId(2l);
            user.setUserName("小明");
            user.setPassWord("fffooo123");
            userDao.saveUser(user);
        }
    
        @Test
        public void findUserByUserName(){
           UserEntity user=userDao.findUserByUserName("小明");
           System.out.println("user is "+user);
        }
    
        @Test
        public void updateUser(){
            UserEntity user=new UserEntity();
            user.setId(2l);
            user.setUserName("天空");
            user.setPassWord("fffxxxx");
            userDao.updateUser(user);
        }
    
        @Test
        public void deleteUserById(){
            userDao.deleteUserById(1l);
        }
    
    }
    

    5、查看驗證結果

    可以使用工具 MongoVUE 工具來連接后直接圖形化展示查看,也可以登錄服務器用命令來查看

    1.登錄 mongos

    bin/mongo -host localhost -port 20000

    2、切換到 test 庫

    use test

    3、查詢 user 集合數據

    db.user.find()

    根據3查詢的結果來觀察測試用例的執行是否正確。

    到此 Spring Boot 對應 MongoDB 的增刪改查功能已經全部實現。

    多數據源 MongoDB 的使用

    接下來實現 MongoDB 多數據源的使用

    1、pom 包配置

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
    

    2、配置兩條數據源,如下:

    mongodb.primary.uri=mongodb://192.168.0.75:20000
    mongodb.primary.database=primary
    mongodb.secondary.uri=mongodb://192.168.0.75:20000
    mongodb.secondary.database=secondary
    

    3、配置兩個庫的數據源

    封裝讀取以 Mongodb 開頭的兩個配置文件

    @Data
    @ConfigurationProperties(prefix="mongodb")
    public class MultipleMongoProperties {
    
    	private MongoProperties primary=new MongoProperties();
    	private MongoProperties secondary=new MongoProperties();
    }
    

    配置不同包路徑下使用不同的數據源

    第一個庫的封裝

    @Configuration
    @EnableMongoRepositories(basePackages="com.neo.model.repository.primary",
    		mongoTemplateRef=PrimaryMongoConfig.MONGO_TEMPLATE)
    public class PrimaryMongoConfig {
    
    	protected static final String MONGO_TEMPLATE="primaryMongoTemplate";
    }
    

    第二個庫的封裝

    @Configuration
    @EnableMongoRepositories(basePackages="com.neo.model.repository.secondary",
    		mongoTemplateRef=SecondaryMongoConfig.MONGO_TEMPLATE)
    public class SecondaryMongoConfig {
    
    	protected static final String MONGO_TEMPLATE="secondaryMongoTemplate";
    }
    

    讀取對應的配置信息并且構造對應的 MongoTemplate

    @Configuration
    public class MultipleMongoConfig {
    
    	@Autowired
    	private MultipleMongoProperties mongoProperties;
    
    	@Primary
    	@Bean(name=PrimaryMongoConfig.MONGO_TEMPLATE)
    	public MongoTemplate primaryMongoTemplate() throws Exception {
    		return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
    	}
    
    	@Bean
    	@Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
    	public MongoTemplate secondaryMongoTemplate() throws Exception {
            return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
    	}
    
    	@Bean
        @Primary
    	public MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {
    		return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
    				mongo.getDatabase());
    	}
    
    	@Bean
    	public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
    		return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
    				mongo.getDatabase());
    	}
    }
    

    兩個庫的配置信息已經完成。

    4、創建兩個庫分別對應的對象和 Repository

    對應可以共用

    public class User implements Serializable {
            private static final long serialVersionUID=-3258839839160856613L;
            private String  id;
            private String userName;
            private String passWord;
    
            public User(String userName, String passWord) {
                    this.userName=userName;
                    this.passWord=passWord;
            }
    }
    

    對應的 Repository

    public interface PrimaryRepository extends MongoRepository<PrimaryMongoObject, String> {
    }
    

    繼承了 MongoRepository 會默認實現很多基本的增刪改查,省了很多自己寫 Repository 層的代碼

    Secondary 和上面的代碼類似就不貼出來了

    5、最后測試

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MuliDatabaseTest {
    
        @Autowired
        private PrimaryRepository primaryRepository;
    
        @Autowired
        private SecondaryRepository secondaryRepository;
    
        @Test
        public void TestSave() {
    
            System.out.println("************************************************************");
            System.out.println("測試開始");
            System.out.println("************************************************************");
    
            this.primaryRepository
                    .save(new PrimaryMongoObject(null, "第一個庫的對象"));
    
            this.secondaryRepository
                    .save(new SecondaryMongoObject(null, "第二個庫的對象"));
    
            List<PrimaryMongoObject> primaries=this.primaryRepository.findAll();
            for (PrimaryMongoObject primary : primaries) {
                System.out.println(primary.toString());
            }
    
            List<SecondaryMongoObject> secondaries=this.secondaryRepository.findAll();
    
            for (SecondaryMongoObject secondary : secondaries) {
                System.out.println(secondary.toString());
            }
    
            System.out.println("************************************************************");
            System.out.println("測試完成");
            System.out.println("************************************************************");
        }
    
    }
    

    到此,MongoDB 多數據源的使用已經完成。

    MongoDB跟關系型數據庫有很多相似之處,就連客戶端連接工具也是。本節我們介紹下,MongoDB客戶端工具的選型及簡單使用。


    1、Navicat for MongoDB

    Navicat 開發了很多好用的數據庫操作工具,我們先來看看官方的定義。

    “Navicat for MongoDB 的高效圖形用戶界面,用于管理和開發 MongoDB 數據庫。
    它能連接本地或遠程的 MongoDB 服務器,以及與 MongoDB Atlas、阿里云、
    騰訊云和華為云兼容。為管理、監控、查詢和可視化數據提供了卓越的功能,
    輕松提高日常 MongoDB 操作的效率。”

    通過定義,我們可以了解到Navicat for MongoDB的功能還是非常強大的。


    先安裝一個看看,還是熟悉的風格


    看下主界面,會發現在前幾節講的那些命令操作,比如:備份、導入、導出等等,在這邊都有相應的功能,而且操作更加的簡便,可以不用再敲命令。數據的修改,也可以像MySql一樣, 直接修改行數據。


    除了以上的操作,還發現一個功能很強大的東西, 那就是GridFS,它是用來處理圖片、html、壓縮包等文件的,可以直接上傳及修改


    說實話,Navicat for MongoDB的功能真的非常強大,非常喜歡。但是,重點來了,這是收費的。



    2、MongoVUE 和 RockMongo


    MongoVUE 安裝體驗下了,但是感覺不好用, 還是收費的。


    RockMongo 是PHP 開發的,看風格不喜歡,就沒安裝體驗了。



    3、Robo 3T

    這個比較輕量, 功能也相對簡單。


    Robo 3T 雖然也提供了對document的查看、修改、刪除等操作,但是操作顯然沒有Navicat for MongoDB 來的方便。


    如果只是簡單查詢的話,推薦使用Robo 3T。

    如果需要更加復雜的功能的話,建議用Navicat for MongoDB


    4、除了以上介紹的,還有其他客戶端工具,比如:Studio 3T、compass、 RockMongo。在此,就不一一介紹,更興趣的可以去研究研究,也可以在評論區探討下。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有