From 8008ea88af2fdf93427e85a11c02bd389374afe3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E4=BB=81=E6=9D=B0?=
<44394914+ailntps@users.noreply.github.com>
Date: Mon, 13 Jul 2020 23:15:13 +0800
Subject: [PATCH] =?UTF-8?q?=E7=8E=8B=E4=BB=81=E6=9D=B0week1=20(#20)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* RenjieWang finished week1
---
...\216\213\344\273\201\346\235\260-week1.md" | 384 ++++++++++++++++++
1 file changed, 384 insertions(+)
create mode 100644 "Week1-Database-Introduction/RenJieWang-Week1/\347\216\213\344\273\201\346\235\260-week1.md"
diff --git "a/Week1-Database-Introduction/RenJieWang-Week1/\347\216\213\344\273\201\346\235\260-week1.md" "b/Week1-Database-Introduction/RenJieWang-Week1/\347\216\213\344\273\201\346\235\260-week1.md"
new file mode 100644
index 0000000..d314697
--- /dev/null
+++ "b/Week1-Database-Introduction/RenJieWang-Week1/\347\216\213\344\273\201\346\235\260-week1.md"
@@ -0,0 +1,384 @@
+
+
+ # 实验一 MySQL的安装和使用
+
+ ## Step1:Ubuntu上MySQL的安装
+
+```bash
+#更新软件列表
+sudo apt-get update
+#安装MySQL服务
+sudo apt-get install mysql-sever
+#使用service命令开启MySQL服务 打开位于/etc/init.d/目录下的服务
+service mysql start
+#启动MySQL安全配置向导,设置root用户的密码及其他
+sudo mysql_secure_installaction
+#MySQL登录
+sudo mysql -uroot -p
+```
+
+ ## Step2:创建数据库执行sql语句
+
+```sql
+//建立数据库test
+create database test;
+//查看MySQL中的所有数据库
+show databases;
+//选中要操作的数据库
+use test;
+//创建表student、teacher和class
+//注意区分单引号和重音符的区别。
+ create table student(
+ -> Sid int(11) primary key,
+ -> Sname varchar(20) not null,
+ -> Sage int(11) not null
+ -> );
+create table `teacher`(
+ -> `Tid` int(11) primary key,
+ -> `Tname` varchar(20) not null,
+ -> `Tsex` varchar(10) default 'male'
+ -> );
+create table class(
+ -> Sid int(11),
+ -> constraint sc_fk foreign key(Sid) references student(Sid),
+ -> Tid int(11),
+ -> constraint tc_fk foreign key(Tid) references teacher(Tid)
+ -> );
+//向表中插入数据
+ insert into student (Sid,Sname,Sage) values
+ -> (0,'小明',15),(1,'小王',15);
+insert into teacher(Tid,Tname,Tsex) values
+ -> (0,'王老师','male');
+insert into class(Cid,Sid,Tid) values (0,0),(1,0);
+//查找王老师教的所有学生
+select Sname from student,teacher,class
+ -> where class.Sid=student.Sid and
+ -> class.Tid=teacher.Tid and
+ -> Tname='王老师';
+```
+
+ ## 遇到的问题:
+
+1. MySQL不知支持中文,三种方法
+
+ 1. 建表时使用`character set=utf8`
+
+ 2. 建表后使用`alter table tableName convert to character set utf8`
+
+ 3. 在MySQL配置文件/etc/mysql/my.cnf中添加
+
+ ```bash
+ [mysqld]
+ character-set-server=utf8
+ [client]
+ default-character-set=utf8
+ ```
+
+ ## TODO:
+
+ - 跟踪sql语句的执行过程
+ -
+
+ # 实验二 Redis的安装与使用
+
+## Step1: Ubuntu上Redis的安装
+
+```bash
+#安装
+sudo apt-get update
+sudo apt-get install redis-server
+#启动服务器
+redis-server
+#启动客户端
+redis-cli
+```
+
+## Step2:使用
+
+Redis有五种数据类型:字符串、哈希、列表、集合、有序集合。
+
+### 字符串
+
+* SET key value 设定key的value
+* GET key 获取key的value
+* DEL key 删除key
+* EXISTS key key是否存在
+* GETSET key 设定旧值的同时返回新值
+* STRLEN key 返回对应字符串的长度
+* APPEND key append_value 在字符串后追加字符串
+* INCR/DECR key 当字符串为数字式+1/-1
+
+### 哈希
+
+hash是一个string类型的field和value的映射表
+
+* HMSET key [field value]+ 同时将多个field-value对设置到key中
+* HSET key field value 单独一个field-value对设置到key中
+* HGETALL key 获取key的所有field和value对,以字符串组的形式
+* HGET key field 获取key中field对应的value
+* HEDL key [field]+ 删除key中的 一个或多个field-value对
+* HEXISTS key field 查看key中是否存在field字段
+* HKEYS/HVALS key 获取key中所有的field/value
+
+### 列表
+
+list是一个字符串列表,最后push的字符串排在最前面,index为0
+
+* LPUSH key [value]+ 向列表中添加字符串,越后面的排序越前
+* LPOP key 弹出第一个元素
+* LINDEX key index 按照index获取元素,0为第一个元素
+* LLEN key 获取列表长度
+* LSET key index value 按照index修改元素的值
+
+### 集合
+
+set是一个无序的字符串集合,集合成员唯一,不能有重复的数据
+
+* SADD key [member]+ 在集合中添加成员
+* SMEMBERS key 返回集合中的所有成员
+* SISMEMBER key member 判断member是否是集合的成员
+* SREM key [member]+ 移除集合中的一个或多个成员
+
+### 有序集合
+
+ 在集合的基础上为成员关联一个double型的数(这个数可以重复),对成员进行排序,有序集合使用哈希表实现,复杂度为O(1)
+
+* ZADD key [score member]+ 为有序集合添加数据
+* ZRANGE key start stop [withscores]? 通过索引区间查找成员
+
+# 实验三: mongoDB的安装与使用
+
+## Step1:MongoDB安装
+
+打开[mongoDB下载官网]( https://www.mongodb.com/try/download/enterprise )选择要下载mongoDB的版本和系统,然后可以选择直接下载或者Copy LInk,然后在Ubuntu使用wget命令下载。
+
+下载完成后:
+
+```bash
+#解压
+tar -zxvf fileName
+#移动文件
+MV fileName/ /usr/local/mongodb
+#导入PATH,有三种方法
+#1.export命令 只存在于当前shell
+export PATH=/bin:$PATH
+exprot PATH=$PATH:/bin
+#2.修改 /etc/profile 添加上面的语句之一,重启生效
+#3.修改 用户目录下的隐藏文件 .bashrc 添加语句,对当前用户,重启生效
+
+#启动mongodb服务
+mongod
+#使用mongo shell进入本地mongodb
+mongo
+```
+
+使用mongo shell连接atlas cluster
+
+* 连接自己的cluster,首先在mongo官网申请免费的atlas cluster,配置好白名单,连接用户后,使用mongo shell连接atlas cluster。
+
+ ```bash
+ mongo "mongodb+srv://ailntps.xlogk.mongodb.net" --username
+ ```
+
+* 连接MongoDB官网的用于学习的atlas cluster
+
+ ```bash
+ mongo "mongodb://cluster0-shard-00-00-jxeqq.mongodb.net:27017,cluster0-shard-00-01-jxeqq.mongodb.net:27017,cluster0-shard-00-02-jxeqq.mongodb.net:27017/test?replicaSet=Cluster0-shard-0" --authenticationDatabase admin --ssl --username m001-student --password m001-mongodb-basics
+
+ #或者
+ mongo "mongodb+srv://cluster0-jxeqq.mongodb.net/test" --username m001-student -password m001-mongodb-basics
+ ```
+
+使用Compass连接MongoDB
+
+在[mongo官网]( https://www.mongodb.com/try/download/compass )下载自己系统的compass安装程序,安装好后使用connection string连接
+
+```bash
+mongodb+srv://m001-student:m001-mongodb-basics@cluster0-jxeqq.mongodb.net/test
+```
+
+## Step2 MongoDB的使用
+
+MongoDB按照逻辑结构可以分为database、collection和document,这是一种层次结构,呈包含关系
+
+* 创建/删除数据库
+
+ ```shell
+ #创建数据库
+ use databaseName
+ #在选中数据库的情况下
+ db.dropDatabase();
+ #查看数据库
+ show dbs
+ ```
+
+* 创建/删除集合(collection)
+
+ ```shell
+ #创建 options类型为document/JSON
+ db.createCollection(name,options)
+ #删除
+ db.collection_name.drop()
+ ```
+
+* 插入
+
+ ```shell
+ #两种插入方法
+ db.collection_name.insertOne(
+
+ )
+ db.collection_name.insertMany(
+ [ ......]
+ )
+ ```
+
+* 查询
+
+ ```shell
+ #查询 projection为投影,默认返回所有键值,设定时采用{key1:1,key2:1}表示选定
+ db.collection_name.find(query,projection)
+
+ #query中为document或Array时
+ "Document.key:value"
+ "Array.0:value" "Array.1:value"
+ Array:[vaule1,vaule2]
+
+ #pretty()表示格式化输出
+ #查询使用的修饰符
+ # or
+ $or:[{key1:value1},{key2:value2}]
+ # <
+ $lt:value
+ # <=
+ $lte:value
+ # >
+ $gt:value
+ # >=
+ $gte:value
+ # !=
+ $ne:value
+ # type
+ $type:typename
+ ```
+
+* 更新
+
+ ```shell
+ #更新,query为条件,update为更新,multi false时只更新查到的第一条数据,true时全部更新
+ db.collection_name.update(
+ ,
+ ,
+ {
+ upsert:
+ multi:
+ }
+ )
+ #更新修饰符
+ #修改数据
+ $set:{key:value}
+ ```
+
+* 删除
+
+ ```shell
+ db.collection_name.remove(
+
+ {
+ justOne:
+ }
+ )
+ ```
+
+# 实验四 Janusgraph实验
+
+## Step1 Janusgraph安装
+
+* 使用docker进行安装的两种方式
+
+ ```shell
+ #docker命令 -i交互运行 -d后台运行 -p指定端口 -t重新分配伪输入终端与-i一起使用 -name 指定容器名
+ # -e设置环境变量 --link添加链接到另一个容器 --rm容器退出时不保留数据,默认保留
+ #第一种,docker启动Janusgraph的服务器,使用8182端口
+ $ docker run -it -p 8182:8182 janusgraph/janusgraph
+ #使用下载好的JanusGraph文件的console连接服务器
+ $ cd install_directory
+ $ ./bin/gremlin.sh
+ #启动console后连接8182端口
+ ==> Configured localhost/127.0.0.1:8182
+
+ #第二种方式
+ #重命名服务器 :latest最新容器
+ $ docker run --name janusgraph-default janusgraph/janusgraph:latest
+ #建立第二个容器作为Console 链接到服务器,并执行 ./bin/gremlin.sh命令
+ $ docker run --rm --link janusgraph-default:janusgraph -e \ GREMLIN_REMOTE_HOSTS=janusgraph \
+ -it janusgraph/janusgraph:latest ./bin/gremlin.sh
+ #连接8182端口
+ ==> Configured localhost/127.0.0.1:8182
+ ```
+
+* 本地安装,下载安装文件后
+
+ ```shell
+ #打开服务器
+ $ ./bin/gremlin-server.sh start
+ #启动Console
+ $ ./bin/gremlin.sh
+ #启动console后连接8182端口
+ ==> Configured localhost/127.0.0.1:8182
+ ```
+
+## Step2 JanusGraph使用
+
+* docker加载“诸神关系图”
+
+ ```shell
+ gremlin> graph = JanusGraphFactory.open('conf/janusgraph-inmemory.properties')
+ ==>standardjanusgraph[cql:[127.0.0.1]]
+ gremlin> GraphOfTheGodsFactory.loadWithoutMixedIndex(graph, true)
+ ==>null
+ gremlin> g = graph.traversal()
+ ==>graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]], standard]
+ ```
+
+* JanusGraph使用,首先通过index key索引键(这里是name)找到一个顶点(saturn)
+
+ vertex.values('key')取顶点的属性
+
+ vertex.label()取顶点的标签
+
+ 通过边前往其他顶点:
+
+ vertex.in('key')指向该节点的边键值为key的顶点
+
+ vertex.out('key')该节点指向的边键值为key的顶点
+
+ ```shell
+ #通过名字查找到土星saturn
+ gremlin> saturn = g.V().has('name', 'saturn').next()
+ #查看土星的value
+ gremlin> g.V(saturn).valueMap()
+ ==>[name:[saturn], age:[10000]]
+ #查看土星的孙子的名字
+ gremlin> g.V(saturn).in('father').in('father').values('name')
+ ==>hercules
+ #建立Hercules顶点
+ gremlin> hercules = g.V(saturn).repeat(__.in('father')).times(2).next()
+ ==>v[1536]
+ #查看Hercules的父母名字
+ gremlin> g.V(hercules).out('father', 'mother').values('name')
+ ==>jupiter
+ ==>alcmene
+ #查看Hercules的父母种族
+ gremlin> g.V(hercules).out('father', 'mother').label()
+ ==>god
+ ==>human
+ #查看和Hercules打过架的
+ gremlin> g.V(hercules).out('battled').valueMap()
+ ==>[name:[nemean]]
+ ==>[name:[hydra]]
+ ==>[name:[cerberus]]
+
+ ```
+
+
\ No newline at end of file