• NoSQL和关系数据库的操作比较


    实验环境

    1、操作系统:Linux(建议Ubuntu16.04);

    2、Hadoop版本:2.7.1;

    3、MySQL版本:5.6;

    4、HBase版本:1.1.2;

    5、Redis版本:3.0.6;

    6、MongoDB版本:3.2.6;

    7、JDK版本:1.7或以上版本;

    8、Java IDE:Eclipse;

    实验目的:

    1、理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点;

    2、熟练使用四种数据库操作常用的Shell命令;

    3、熟悉四种数据库操作常用的Java API。

     

    实验步骤:

    (一) MySQL数据库操作

    学生表Student

    Name

    English

    Math

    Computer

    zhangsan

    69

    86

    77

    lisi

    55

    100

    88

    根据上面给出的Student表,在MySQL数据库中完成如下操作:

    (1)在MySQL中创建Student表,并录入数据;

     

    (2)用SQL语句输出Student表中的所有记录;

     

    (3)查询zhangsan的Computer成绩;

     

    (4)修改lisi的Math成绩,改为95。

     

            

    根据上面已经设计出的Student表,使用MySQL的JAVA客户端编程实现以下操作:

    (1)向Student表中添加如下所示的一条记录:

    scofield

    45

    89

    100

    (2)获取scofield的English成绩信息

    package com.mysql;

    import java.sql.*;

    public class MysqlTest {

    static final String DRIVER = "com.mysql.jdbc.Driver";

    static final String DB = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&useSSL=false";

    static final String USER = "root";

    static final String PASSWD = "hadoop";

    public static void main(String[] args) {

    Connection conn = null;

    Statement stmt = null;

    try {

    Class.forName(DRIVER);

    System.out.println("Connecting to a selected database...");

    conn = DriverManager.getConnection(DB, USER, PASSWD);

    stmt = conn.createStatement();

    String sql = "insert into student values('scofield',45,89,100)";

    stmt.executeUpdate(sql);

    System.out.println("Inserting records into the table successfully!");

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (SQLException e) {

    e.printStackTrace();

    } finally {

    if (stmt != null)

    try {

    stmt.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    if (conn != null)

    try {

    conn.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    }

    }

     

    (二)HBase数据库操作

    学生表Student

         name

    score

    English

    Math

    Computer

    zhangsan

    69

    86

    77

    lisi

    55

    100

    88

    根据上面给出的学生表Student的信息,执行如下操作:

    (1)用Hbase Shell命令创建学生表Student;

     

     

    (2)用scan命令浏览Student表的相关信息;

     

    (3)查询zhangsan的Computer成绩;

     

    (4)修改lisi的Math成绩,改为95。

     

    2.根据上面已经设计出的Student表,用HBase API编程实现以下操作:

    (1)添加数据:English:45  Math:89 Computer:100

    scofield

    45

    89

    100

    (2)获取scofield的English成绩信息。

    public class HbaseTest {

    public static Configuration configuration;

    public static Connection connection;

    public static Admin admin;

    public static void main(String[] args) {

    configuration = HBaseConfiguration.create();

    configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");

    try {

    connection = ConnectionFactory.createConnection(configuration);

    admin = connection.getAdmin();

    } catch (IOException e) {

    e.printStackTrace();

    }

    try {

    insertRow("student", "scofield", "score", "English", "45");

    insertRow("student", "scofield", "score", "Math", "89");

    insertRow("student", "scofield", "score", "Computer", "100");

    } catch (IOException e) {

    e.printStackTrace();

    }

    close();

    }

    public static void insertRow(String tableName, String rowKey,

    String colFamily, String col, String val) throws IOException {

    Table table = connection.getTable(TableName.valueOf(tableName));

    Put put = new Put(rowKey.getBytes());

    put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());

    table.put(put);

    table.close();

    }

    public static void close() {

    try {

    if (admin != null) {

    admin.close();

    }

    if (null != connection) {

    connection.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    (三)Redis数据库操作

    Student键值对如下:

    zhangsan:{

    English: 69

    Math: 86

    Computer: 77

    lisi:{

    English: 55

    Math: 100

    Computer: 88

    1. 根据上面给出的键值对,完成如下操作:

    (1)用Redis的哈希结构设计出学生表Student(键值可以用student.zhangsan和student.lisi来表示两个键值属于同一个表);

       

    (3)用hgetall命令分别输出zhangsan和lisi的成绩信息;

     

     

    (4)用hget命令查询zhangsan的Computer成绩;

     

    (5)修改lisi的Math成绩,改为95。

     

    2.根据上面已经设计出的学生表Student,用Redis的JAVA客户端编程(jedis),实现如下操作:

    (1)添加数据:English:45  Math:89 Computer:100

    该数据对应的键值对形式如下:

    scofield:{

    English: 45

    Math: 89

    Computer: 100

    import java.util.Map;

    import redis.clients.jedis.Jedis;

    public class test {

    public static void main(String[] args) {

    Jedis jedis = new Jedis("localhost");

    jedis.hset("student.scofield", "English", "45");

    jedis.hset("student.scofield", "Math", "89");

    jedis.hset("student.scofield", "Computer", "100");

    Map<String, String> value = jedis.hgetAll("student.scofield");

    for (Map.Entry<String, String> entry : value.entrySet()) {

    System.out.println(entry.getKey() + ":" + entry.getValue());

    }

    }

    }

     

    (2)获取scofield的English成绩信息

    import redis.clients.jedis.Jedis;

    class RedisTest2 {

    public static void main(String[] args) {

    Jedis jedis = new Jedis("localhost");

    String value = jedis.hget("student.scofield", "English");

    System.out.println("scofield's English score is: " + value);

    }

    }

     

    (四)MongoDB数据库操作

    Student文档如下:

    {

    “name”: “zhangsan”,

    “score”: {

    “English”: 69,

    “Math”: 86,

    “Computer”: 77

    }

    }

    {

    “name”: “lisi”,

    “score”: {

    “English”: 55,

    “Math”: 100,

    “Computer”: 88

    }

    }

    1.根据上面给出的文档,完成如下操作:

    (1)用MongoDB Shell设计出student集合;

    (3)用find()方法输出两个学生的信息;

     

    (4)用find()方法查询zhangsan的所有成绩(只显示score列);

     

    (5)修改lisi的Math成绩,改为95。

     

    2.根据上面已经设计出的Student集合,用MongoDB的Java客户端编程,实现如下操作:

    (1)添加数据:English:45 Math:89  Computer:100

    与上述数据对应的文档形式如下:

    {

    “name”: “scofield”,

    “score”: {

    “English”: 45,

    “Math”: 89,

    “Computer”: 100

    }

    }

    public class MongoTest {

    public static void main(String[] args) {

    MongoClient mongoClient = new MongoClient("localhost", 27017);

    MongoDatabase mongoDatabase = mongoClient.getDatabase("student");

    MongoCollection<Document> collection = mongoDatabase.getCollection("student");

    Document document = new Document("name", "scofield").append("score",new Document("English", 45).append("Math", 89).append("Computer", 100));

    List<Document> documents = new ArrayList<Document>();

    documents.add(document);

    collection.insertMany(documents);

    System.out.println("文档插入成功");

    }

    }

    (2)获取scofield的所有成绩成绩信息(只显示score列)

    public class MongoTest2 {

    public static void main(String[] args) {

    MongoClient mongoClient=new MongoClient("localhost",27017);

    MongoDatabase mongoDatabase = mongoClient.getDatabase("student");

    MongoCollection<Document> collection = mongoDatabase.getCollection("student");

    MongoCursor<Document> cursor=collection.find( new Document("name","scofield")).

    projection(new Document("score",1).append("_id", 0)).iterator();

    while(cursor.hasNext())

    System.out.println(cursor.next().toJson());

    }

    }

  • 相关阅读:
    mysql 主从配置 读写分离
    interface接口
    http结构
    call_user_func函数
    pcntl_fork 进程
    数据库事务
    php 之 ob缓冲
    shell脚本
    php 守护进程
    ssdb zset
  • 原文地址:https://www.cnblogs.com/ICDTAD/p/14214419.html
Copyright © 2020-2023  润新知