云计算技术 实验六 NoSQL数据库的安装和使用
2.redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。1.mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似。完成数据库的插入,删除,以及查询。MongoDB的成熟度比较低,,但是Mysql
参考资料为:
教材代码-林子雨编著《大数据基础编程、实验和案例教程(第2版)》教材所有章节代码_厦大数据库实验室博客
1.实验学时
4学时
2.实验目的
- 熟悉Redis系统的安装和应用
- 熟悉MongoDB的安装和使用
- 掌握MongoDB编程实践
3.实验内容
(一)完成Redis的安装和使用。完成数据库的插入,删除,以及查询。
先下载到对应的文件夹:
文件夹改名:
文件夹权限赋予:
输入命令安装redis
安装成功。
打开redis服务器:
建立新终端然后输入命令进入redis客户端:
使用键值对:
创建三个表:
开始插入数据:
成功插入数据“算法”
修改数据:这里中文识别有点问题
成功修改为“编译原理”
删除数据:
这里中文显示有问题。
成功删除刚刚设置的“编译原理名字”
这里的数据库编译方式是:表名字:行名字:列名字
(二)MongoDB的安装和使用。完成MongoDB的基本的shell命令。
使用软件源安装MongoDB
查找下载对应软件包
创建MongoDB文件列表
安装MongoDB
安装成功。
启动MongoDB成功
开始使用shell命令:
常见命令:
展现数据库、使用数据库、创建集合
切换数据库(school)
插入数据:
如果是save,_id相同,则会更新数据。insert会插入数据
查找数据:
一般来说,查找数据的格式为db.yourCollection.find(criteria,filterDisplay);
如果查询条件为空,可以使用{}作为占位符
查询所有记录:
查询指定记录(数据)
查询指定列、sname、sage数据
and条件查询:
or条件查询
修改数据:
删除数据:
删除集合:
(三)使用Java API对MongoDB进行访问。
传输文件之后,打开eclipse:
将下载之后的jar包导入并且创建工程之后,在新建立的工程之下创建MongoDBExample.java文件
然后接入代码:下面为java代码
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
public class TestMongoDB {
/**
* @param args
*/
public static void main(String[] args) {
// insert();//插入数据。执行插入时,可将其他三句函数调用语句注释,下同
find(); //查找数据
// update();//更新数据
// delete();//删除数据
}
/**
* 返回指定数据库中的指定集合
* @param dbname 数据库名
* @param collectionname 集合名
* @return
*/
//MongoDB无需预定义数据库和集合,在使用的时候会自动创建
public static MongoCollection<Document> getCollection(String dbname,String collectionname){
//实例化一个mongo客户端,服务器地址:localhost(本地),端口号:27017
MongoClient mongoClient=new MongoClient("localhost",27017);
//实例化一个mongo数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(dbname);
//获取数据库中某个集合
MongoCollection<Document> collection = mongoDatabase.getCollection(collectionname);
return collection;
}
/**
* 插入数据
*/
public static void insert(){
try{
//连接MongoDB,指定连接数据库名,指定连接表名。
MongoCollection<Document> collection= getCollection("School","student"); //数据库名:School 集合名:student
//实例化一个文档,文档内容为{sname:'Mary',sage:25},如果还有其他字段,可以继续追加append
Document doc1=new Document("sname","Mary").append("sage", 25);
//实例化一个文档,文档内容为{sname:'Bob',sage:20}
Document doc2=new Document("sname","Bob").append("sage", 20);
List<Document> documents = new ArrayList<Document>();
//将doc1、doc2加入到documents列表中
documents.add(doc1);
documents.add(doc2);
//将documents插入集合
collection.insertMany(documents);
System.out.println("插入成功");
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
/**
* 查询数据
*/
public static void find(){
try{
MongoCollection<Document> collection = getCollection("School","student"); //数据库名:School 集合名:student
//通过游标遍历检索出的文档集合
// MongoCursor<Document> cursor= collection.find(new Document("sname","Mary")). projection(new Document("sname",1).append("sage",1).append("_id", 0)).iterator(); //find查询条件:sname='Mary'。projection筛选:显示sname和sage,不显示_id(_id默认会显示)
//查询所有数据
MongoCursor<Document> cursor= collection.find().iterator();
while(cursor.hasNext()){
System.out.println(cursor.next().toJson());
}
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
/**
* 更新数据
*/
public static void update(){
try{
MongoCollection<Document> collection = getCollection("School","student"); //数据库名:School 集合名:student
//更新文档,将文档中sname='Mary'的文档修改为sage=22
collection.updateMany(Filters.eq("sname", "Mary"), new Document("$set",new Document("sage",22)));
System.out.println("更新成功!");
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
/**
* 删除数据
*/
public static void delete(){
try{
MongoCollection<Document> collection = getCollection("School","student"); //数据库名:School 集合名:student
//删除符合条件的第一个文档
collection.deleteOne(Filters.eq("sname", "Bob"));
//删除所有符合条件的文档
//collection.deleteMany (Filters.eq("sname", "Bob"));
System.out.println("删除成功!");
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}
得到结果:
4.思考题
(一)Redis和传统的Mysql数据库的区别在哪里?
1.mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
2.redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限
(二)MongoDB有哪些特点,和Mysql数据库的区别在哪里?
MongoDB是非关系型数据库(nosql ),属于文档型数据库。文档是MongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
MongoDB是非关系型数据库,而Mysql是关系型数据库。
MongoDB存储方式是内存虚拟+持久化,Mysql有不同的引擎对应着不同的存储方式。
MongoDB的成熟度比较低,,但是Mysql数据库的成熟度比较高。
MongoDB的优势在于他的速度、高拓展性、存储形式。Mysql优势在于他的广泛程度,成熟的体系。
5.实验结论或体会
1.使用redis数据库的时候,需要注意键值对的选择,注意,使用中文的时候可能会导致发生数据错误。
2.使用MongoDB的时候,注意对应的版本号,切换集合的时候,需要注意集合是否存在。
3.在eclipse中编写java程序的时候,需要注意jar包的导入。
更多推荐
所有评论(0)