数据库操作(一些元数据存储库)——mongoDB、MySQL、KBase、Neo4j

张开发
2026/4/6 11:13:46 15 分钟阅读

分享文章

数据库操作(一些元数据存储库)——mongoDB、MySQL、KBase、Neo4j
目录一、mongoDB1、MongoDB安装2、启动、重启、关闭MongoDB1、启动mongodb:2、重启3、关闭3、导入文件:mongoimport | 导出文件:mongoexport | 备份数据库:mongodump | 恢复数据库:mongorestore1、导入2、导出3、备份4、恢复4、命令行操作5、客户端操作:nosqlbooster4mongo1、客户端安装2、SSH登录6、python操作1)Python连接数据库:2)python批量操作7、挂掉的一些情况与对策二、mysql 81、基于命令行操作1)Mysql导出库表结构和数据以及导入脚本到数据库2)为mysql数据库用户授权3)查看数据库/表占空间大小4)查看各个用户信息:5、查看表的创建语句以及查看所有列的字符集6、使用ibd文件恢复数据2、基于客户端界面操作(Navicat+SQL):1)CREATE创建2)SELECT查询(包括部分show操作)3)ALTER修改操作:添加列、删除行、更改列名、更改列数据类型4)update更新5)INSERT插入6)DELETE删除记录7)部分函数:8)MySQL自带数据库,如information_schema3、存储过程1、语法结构:2、示例:若索引index_name不存在则创建索引4、视图5、Python中的操作1、一些连接、查询等常规操作6、一些异常处理三、kbase数据库1、K-SQL2、 在Python中操作pykbase安装可能的错误代码:基于KBaseClient.py:基于KBase.py:一些常见的异常四、Neo4j1、Cypher2、python操作Neo4j:py2neo五、mycat:数据库中间件六、dbutils:连接池操作一些基础知识:索引:数据量非常大时,为了提升查询速度,需要在经常作为查询条件的列上添加索引;单列索引:主键索引,数据库表的主键字段会自动创建索引。唯一索引,当某个列添加了Unique约束,也会自动创建唯一索引,要求值必须是唯一的。普通索引,给普通字段添加索引就是普通索引。组合索引:多个字段合起来创建一个索引,只有当查询条件中使用了组合索引的第一个字段,索引才会被使用,使用组合索引是遵循最左前缀原则。联合索引包含的这些字段同时出现在 WHERE、ORDER BY 或 GROUP BY 子句中,可以显著提升查询性能。常见的索引方法:BTree方式:最常见的索引类型,适用于范围查询和排序操作(在使用 =、、=、、= 或 BETWEEN 运算符的表达式中会充分发挥其性能)。因为B-Tree索引中的数据是有序排列的,可以有效地进行范围查询和排序操作。HASH方式: 该索引方式使用哈希函数将键映射到索引位置,所以适用于等值查询,即通过哈希函数将键映射到存储位置,实现快速查找;哈希索引的查找速度非常快,但不适用于范围查询‌。引擎:数据库引擎是用于 存储、处理和保护数据的核心服务。利用数据库引擎可以 控制访问权限并快速处理事务;常见的数据库引擎:InnoDB (MySQL):支持ACID事务、行级锁和外键约束;MyISAM (MySQL):不支持ACID事务,表级锁,在单机环境下执行读操作时表现非常优秀(ISAM引擎,不支持事务处理、不支持外来键、不能够容错、也不支持索引);WAL(PostgreSQL):使用WAL来保证事务的持久性和一致性,支持多版本并发控制;Cassandra(NoSQL) :分布式架构,适合大规模的数据存储,支持多副本机制和容错能力。一、mongoDB1、MongoDB安装在Ubuntu的命令行中输入:sudo apt-get install mongodb(一般等待安装,一会便安装成功)检查是否安装成功:root@cqf-THTF-Chaoqiang-Server:/# mongo注意:安装时出错,提示“有未满足的依赖关系”,本次解决方法是“重装系统”。2、启动、重启、关闭MongoDB1、启动mongodb:Linux下启动mongodb:nohup /usr/bin/mongod -f /etc/mongod.conf nohup命令 mongo应用 –f mongo配置文件service mongod start(默认设置MongoDB是随Ubuntu启动自动启动的)2、重启sudo service mongodb restart3、关闭use admindb.shutdownServer({force : true})service mongodb stop3、导入文件:mongoimport | 导出文件:mongoexport | 备份数据库:mongodump | 恢复数据库:mongorestore1、导入导入、导出可以是.csv等格式文件。【其与mongo.exe是同级的,因此不能进入Mongo后执行该命令】-h 主机ip+端口号-d 数据库名-c 集合名-f 字段名 (mongo中自动会有一个_id字段,相当于主键,因此不可以_id自己命名字段)-type 文件类型-file 文件所在目录2、导出3、备份备份、恢复基于.bson文件示例:备份mongodb数据库到与当前mongodump命令同一位置backup目录下:4、恢复示例:-d指定要恢复为的数据库,可以将备份的数据库恢复到与原来不同名的数据库中,这里为mongodb2,–drop表示在恢复前删除集合(若存在)。否则,数据就会与现有集合数据合并,可能会覆盖一些文档。4、命令行操作(1)显示所有的数据库: show dbs;(2)切换数据库: use db_name;(当db_name不存在时则会直接创建一个新的)(3)显示当前数据库中所有的集合: show collections;或 show tables;(4)查询操作:db.collection_name.find({条件})查询返回指定字段(jielun):db.paper_2005.find({}, {‘jielun’:1})模糊匹配(like)查询:① 类似于SQL中的like %str%:db.paper_2005.find({'bjqw': /研究展望/}, {'bjqw':1})②类似于SQL中的like str%:db.paper_2005.find({'bjqw': /^研究展望/}, {'bjqw':1})③使用正则:db.paper_2005.find({'title': {'$regex': '一分钟学会'}}, {'bjqw':1})查询嵌套字段:db.paper_2005.find({'jielun_fet.is_jielunduan': 1})逻辑比较查询条件:db.paper_2005.find({'user': {'$ne': 'fish'}}).count()逻辑运算符:"$lt""""$lte""=""$gt""""$gte""=""$ne""!="判断字段是否存在:db.paper_2005.find({'user': {'$exists': true}})查询条件为两个字段的比较:db.paper_2005.find({'$where': 'this.Predict_tag_bayes != this.Predict_tag_SVM'})查询一个字段有几种值:db.collection.distinct(filed_name), 返回结果是list如:db.paper_2005.distinct('filename')在Python中:coll.find().distinct(filed_name)查询存在/不存在某个集合的数据($in / $nin):db.paper_2005.find({'nian':{'$in':['2010','2011','2012','2013','2014','2015']})(5)向指定数据库(my_mongo)的集合(my_collection)中插入数据:(之前需要切换到my_mongo): db.my_collection.insert({'name':'cqf', 'age':12})(6)更新操作:db.collection_name.update({键值对条件},{$set:{键值对}},upsert, multi)(条件可以省略,只写{})upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。multi : mongodb默认是false,只更新找到的第一条记录,如果为true,就把按条件查出来多条记录全部更新。特别的,①更新字段名: db.getCollection('my_collection').update({}, {'$rename':{'age':'age_new'}}, false, true);②删除字段名: db.my_collection.update({}, {'$unset':{'age':''}}, false, true);(7)删除操作(删除所有数据,{}中可以加入键-值对条件):db.collection_name.remove({})5、客户端操作:nosqlbooster4mongo1、客户端安装官网下载.exe安装包文件(https://nosqlbooster.com/downloads),双击直接安装即可。2、SSH登录【注意,我的MongoDB服务是安装在Ubuntu系统上的】安装完成后,我是SSH方式登录:点击connect–create,然后进入Basic标签页:其中Sever为MongoDB的配置文件( cat etc/mongod.conf )中net指定的ip、port(如下),Name是连接后显示的连名字。# network interfacesnet: port:27017bindIp:127.0.0.1然后切换到SSH标签页:其中Address为MongoDB所在的机器真实ip,端口号为该机器SSH指定的端口号(需要确定SSH服务是启动的,且其端口已经被启用,在Ubuntu使用下面命令查看):# 查看SSH服务是否为启动状态sudoservicesshstatus# 查看SSH使用的端口号grepPort /etc/ssh/sshd_config# 查看端口号启用情况,State为LISTEN表示正在监听,已启用sudonetstat-plnt输入正确的用户名、密码就可以成功访问了。6、python操作1)Python连接数据库:1)SSH连接:importpymongofromsshtunnelimportSSHTunnelForwarderimportatexit realskip_ip='192.168.52.110'# mongodb_ip、real_mongodb_port为mongodb配置文件中的bindIp和port(配置文件默认在/etc/mongod.conf)mongodb_ip='127.0.0.1'real_mongodb_port=27017server=SSHTunnelForwarder((realskip_ip,22),ssh_password='xxx',ssh_username='mmgg',remote_bind_address=(mongodb_ip,real_mongodb_port))#mongodb默认端口27017server.start()self.client=pymongo.MongoClient('127.0.0.1',server.local_bind_port)self.db=self.client[db_name]self.coll=self.db[collection_name]defshutdown():server.stop()atexit.register(shutdown)2)用户名、密码连接# admin 账户 可以操作任意数据库# 例如:用户名admin,密码admin*ccdd*kkyyxt,ip:192.fff.xxx.110,端口27017client=pymongo.MongoClient('mongodb://admin:admin*cnkicnki*kyxt@192.fff.xxx.110:27017')2)python批量操作1、批量操作:bulk1)Bulk=db.collection.initialize_unordered_bulk_op()# 或 Bulk=db.collection.initialize_ordered_bulk_op()# 然后进行相关操作定义,如:Bulk.find()# [可加.update({“$set”:{键值对}}) / .remove()]Bulk.insert()# 最后统一执行操作:Bulk.execute()2)批量写入:db.coll_name.bulk_write( seq )。注意seq格式是操作函数组成的列表frompymongo.operationsimportInsertOnefrompymongoimportUpdateOne requests=[InsertOne({'_id':1}),DeleteOne({'_id':2}),InsertOne({'_id':3}),ReplaceOne({'_id':4},'i':1)]try:db.test.bulk_write(requests,ordered=False)except:pprint(bwe.details)7、挂掉的一些情况与对策1)too many open files原因挂掉解决:增大系统的open file对应的ulimit参数(所有操作包括mongo的启动都要在一个shell里进行,且该修改命令只对这个shell起作用)二、mysql 8安装1、CentOS7.9安装安装之前需要卸载系统自带的MariaDB:rpm-qa|grepmariadb yum remove mariadb-libs-y(1)安装命令注意:最后安装时可能出现错误:The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository.解决:最后一句命令添加参数 --nogpgcheck, 作用是 “禁掉GPG验证检查”wgethttp://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpmrpm-ivhmysql80-community-release-el7-3.noarch.rpm yum update yuminstallmysql-community-server--nogpgcheck# 安装mysql(2)启动mysqlCentOS7.9(同Ubuntu):servicemysqld startwindow10net start mysql80# 关闭是:net stop mysql80(3)进入mysql更改密码grep'temporary password'/var/log/mysqld.log# DOS中查看默认密码mysql-uroot-p# 使用该密码进入mysqlALTERUSER'root'@'localhost'IDENTIFIED BY'xxxx@2022';# 更改(设置)密码2、win10安装完成后,Navicat连接出现2059错误:原因:在mysql8之前的版本中加密规则为mysql_native_password,而在mysql8以后的加密规则为caching_sha2_password。解决:cmd进入mysql,并执行下述命令ALTERUSER'root'@'localhost'IDENTIFIED BY'your password'PASSWORD EXPIRE NEVER;# 作废原密码ALTERUSER'root'@'localhost'IDENTIFIED WITH mysql_native_password BY'your password';# 修改加密规则并设置新密码如下图:常用引擎:InnoDB 引擎:提供ACID事务支持,提供行级锁和外键约束等,在读写操作时不锁表,所以适合并发度较高的场景使用。MyISAM 引擎:不提供ACID事务支持,执行写操作的时候会锁表,但会存储表行数,因此查询结果数量时不需要进行全表扫描。1、基于命令行操作基本说明:1、数据类型1)文本有4有类型:TINYTEXT 256bytes TEXT 64kb MEDIUMTEXT 16Mb LONGTEXT 4GB2)时间类型DATE# 仅年月日,格式:1000-01-01 (占三个字节)DATETIME# 日期和时间,范围:1000-01-01 00:00:00' ~ '9999-12-31 23:59:59 (占8个字节)TIMESTAMP# 日期和时间,和时区关联, 范围:'1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'(占4个字节)3)json类型json最大能够存储4G的数据。2、数据值型字段不能为空null:int、float、decimal(精确数值)1)Mysql导出库表结构和数据以及导入脚本到数据库(1)导出库表结构和数据:mysqldump(2)导入数据库脚本:source①脚本中有创建库直接进mysql环境 :source filePath;②没有创建库,进mysql环境然后:create database databse_name; use database database_name;sourcefilePath报错1:ERROR 2005 (HY000): Unknown MySQL server host 'xxxx'原因:可能是导出和导入的编码不一致,可以尝试导入编码utf8、gbk、gb2312等;也可能是mysql低版本导入到高版本所致。解决:进入数据库使用命令:mysql -u root -p --default-character-set=utf8报错2:Failed to open file 'xxx.sql', error: 2解决:cmd中从.sql文件所在的路径进入mysql2)为mysql数据库用户授权【授予所有权限:】3)查看数据库/表占空间大小进入目标数据库:use information_schema;4)查看各个用户信息:root账号下查看,但是密码是加密的,无法查看。5、查看表的创建语句以及查看所有列的字符集查看表的创建语句:mysqlSHOWCREATETABLEeconomicsManage;+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+|Table|CreateTable|+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+|economicsManage|CREATETABLE`economicsManage`(`id`int(11)DEFAULTNULL,`中文关键词`text,`中文刊名`text,`年`text,`文件名`varchar(32)NOTNULL,`作者`text,`全文`mediumtext,`主题`text,`专辑代码`text,`小标题`text,`update_date`dateDEFAULTNULL,`篇名`text)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4查看所有列的字符集:字符集不是“utf8mb4”,是“latin1”时,存储中文可能会报错:pymysql.err.DataError: (1366, "Incorrect string value: '\\xE5\\x9C\\x9F\\xE5\\x9C\\xB0...' for column '篇名' at row 1")。mysqlSHOWFULLCOLUMNSFROMeconomicsManageWHEREField='篇名';+-

更多文章