数据库

docker微服务整合的一些细节

不想你离开。 提交于 2020-03-17 02:37:05
改变注册中心线上线下配置 注意微服务数据库url的配置,如果MySql数据库使用非Docker容器方式进行的配置,那么MYSQL数据库的url要修改为“MYSQL数据库服务的IP+端口”的形式如果使用Docker容器启动的MySQL数据库服务,那么MYSQL数据库的url要根据上面的提示修改为“MySQL的服务名称或容器名加端口的形式” 来源: CSDN 作者: 天又热了 链接: https://blog.csdn.net/weixin_43404791/article/details/104906480

QSqlQuery 可以让你的程序崩溃

坚强是说给别人听的谎言 提交于 2020-03-17 02:02:57
某厂面试归来,发现自己落伍了!>>> linux平台下。 一个程序总是运行个两三天,或者一两天的时候突然崩溃了,以前发过一个 讨论 但是也没找到解决办法,使用的数据库是SQLITE 使用GDB跟踪程序,结果找到了崩溃的地方却显示栈被破坏显示不出调用的具体方法,运行了好几次都是这样。定位到了 __memmove_ssse3在libc里面。 为了恢复完整的栈信息在国外大牛那里找来两句话 (gdb)set $pc=*(void **)$esp (gdb)set $esp=$esp+4 执行完就可以查看堆栈了(32位平台)。注意这个不能由core文件进入gdb,必须只能是运行着的程序崩溃被gdb捕捉到才行。 查看堆栈看到了出错了地点 void xxx::execsql(QString sql) { QMutexLocker locker(&this->readlock); QSqlQuery query(this->database); //运行到这里崩溃了 if(query.exec(sql)) ... ... } 程序多线程向数据库插入数据,尽管我已经很小心地处理线程了,但是运行到未来某一时刻还是会崩溃。 直到我又等了两三天测试,测试要看机缘啊,有时候它完全正常工作啊,有时候会崩溃。 结果就是这个方法执行的很频繁,而且同一时刻只有一个线程在访问数据库,但是这句话会崩溃

Redis 概念

泪湿孤枕 提交于 2020-03-17 01:58:06
Redis是什么 Redis是一个使用C语言编写的key-value开源的NOSQL存储系统。 (MySQL以二维表格的形式存储)。 NoSQL适用场景 对数据的高并发读写 对数据的高可扩展性 快速存取数据 NoSQL不适用场景 不支持事务 不支持基于sql的结构化查询存储,处理复杂的关系 NoSQL数据库举例 memcache 很早出现的NoSql数据库,数据都在内存中。 一般不持久化支持简单的key-value模式。 一般是作为缓存数据库辅助持久化的数据库。 redis 几乎覆盖了Memcached的绝大部分功能。 数据都在内存中。 支持持久化,主要用作备份恢复。 支持简单的key-value模式。 还支持多种数据结构的存储,比如 list、set、hash、zset等。 一般是作为缓存数据库辅助持久化的数据库。 现在市面上用得非常多的一款内存数据库。 mongoDB介绍 高性能、开源、模式自由(schema free)的文档型数据库数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘。 虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能。 支持二进制数据及大型对象可以根据数据的特点替代RDBMS(关系数据库管理系统) ,成为独立的数据库。或者配合RDBMS,存储特定的数据。 列式存储HBase HBase是Hadoop项目中的数据库。

PHP父类调用子类方法,CodeIgniter中DB的继承关系

孤街浪徒 提交于 2020-03-17 01:54:46
某厂面试归来,发现自己落伍了!>>> 先看几行代码: <!-- lang: php --> class A { private $b; function __construct($a){ $this->b = $a; } function func1(){ var_dump($this->b); } function func2(){ $this->funcb(); } } class B extends A { function funcb(){ var_dump("b"); } } $a = new B('a'); $a->func1(); $a->func2(); 这几行代码是没有错误的,在父类中调用子类的方法,子类实例化之后可以正常工作。 CI的DB部分正是使用了这种方式来封装数据库操作。 CI的DB函数的写法正是先加载 CI_DB_driver 这个基类,然后检查active record是否开启,如果开启则 <!-- lang: php --> class CI_DB_active_record extends CI_DB_driver 然后 <!-- lang: php --> class CI_DB extends CI_DB_active_record 否则 <!-- lang: php --> class CI_DB extends CI_DB_driver

集成就能降成本!GS集成DaVinci Resolve项目服务器

一个人想着一个人 提交于 2020-03-17 00:50:12
集成就能降成本!GS集成DaVinci Resolve项目服务器 一个大型影视项目的后期制作,通常会包括剪辑、配音、字幕、调色、特效等多个内容,需要多个后期人员使用同一个项目文件,这就需要DaVinci Resolve项目服务器来进行管理和协调。DaVinci Resolve项目服务器是一个数据库,是用来保存用户、工程文件、颜色分级的容器。GS与DaVinci Resolve项目服务器集成,将显著节省用户在成本、部署、维护的投入。并且整合还意味着,GS存储的高可用保护,也能同时用在DaVinci Resolve数据库上,提高数据库的安全性。今天我们就来重点讲讲GS媒体共享存储的这些优势。 省成本 如果不使用与DaVinci Resolve项目服务器集成的GS,用户的部署会是什么样子呢?传统的做法,就是使用一台服务器安装DaVinci Resolve数据库,然后与前端的客户端,以及保存视频素材的存储组合在一起。这样用户至少需要三台设备互连,形成一个小型网络,如下图所示: 但这只是起步的部署,随着业务的发展,用户的项目越来越多,数据库也会越来越大,IOPS的性能要求也会越来越高,那么服务器有限的空间就无法满足。而保存视频的存储,一般以NAS性能为主,这样用户就需要添加新的SAN存储,来保证数据库服务器的需求。很快用户部署的架构就会是这个样子: 而有了GS媒体共享存储

centos7使用yum安装mysql5.6版本

倖福魔咒の 提交于 2020-03-17 00:49:41
1、检查系统中是否已安装 MySQL。 rpm -qa | grep mysql 返回空值的话,就说明没有安装 MySQL 。 注意:在新版本的CentOS7中,默认的数据库已更新为了Mariadb,而非 MySQL,所以执行 yum install mysql 命令只是更新Mariadb数据库,并不会安装 MySQL 。 2、查看已安装的 Mariadb 数据库版本。 rpm -qa|grep -i mariadb 3、卸载已安装的 Mariadb 数据库。 rpm -qa|grep mariadb|xargs rpm -e --nodeps 4、再次查看已安装的 Mariadb 数据库版本,确认是否卸载完成。 rpm -qa|grep -i mariadb 5、开始安装mysql5.6下载安装包 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 6、安装mysql-community-release-el7-5.noarch.rpm包 rpm -ivh mysql-community-release-el7-5.noarch.rpm 7、安装mysql。 yum install mysql-server 8、启动 mysql 服务 。 systemctl start mysqld

数据库中间件漫谈

允我心安 提交于 2020-03-16 21:44:59
某厂面试归来,发现自己落伍了!>>> 1.前言 随着业务的发展,MySQL数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、网络IO、事务数、连接数)总是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。 分表、分库和读写分离可以有效地减小单台数据库的压力。 本文主要针对业界主流的数据库中间件的实现、功能、成本等方面进行对比,总结数据库中间件的实现方式,并展望未来的可能发展。 2. 实现方式 一般来说,对于数据库中间件,可以在以下六个层次做切入。 2.1 代码层 在同一个项目中创建多个数据源,采用if else的方式,直接根据条件在代码中路由。 Spring中有动态切换数据源的抽象类,具体参见AbstractRoutingDataSource。 如果项目不是很庞大,使用这种方式能够快速的进行分库。但缺点也是显而易见的,这种海量的代码侵入是绝不能被接受的。 而且当查询结果返回时,需要对跨库、聚合等查询结果进行归并,开发工作量非常巨大。 这种方式了解一下即可,一般不会去使用。 2.2 框架层 主要是修改或增强现有ORM框架的功能,在SQL中增加一些自定义原语或者hint来实现。 常见的比如实现一些拦截器(比如Mybatis的Interceptor接口)

数据库原理 活锁死锁

那年仲夏 提交于 2020-03-16 20:13:56
1、封锁技术可以有效的解决并行操作一致性的问题,但是也带来了新的问题 活锁:某个事务被其它后来的事务抢占了,产生一直没有运行的现象 死锁:两个事务各自需要对方解决自己要操作的数据对象上的锁的权限,永久等待对方释放锁 2、如何避免活锁?死锁? 避免活锁: 采用先来先服务的策略 避免死锁: 死锁的预防(通过破坏死锁产生的条件使得不会发生死锁)、死锁的诊断和解除(允许发生死锁,但是定期的诊断和解除死锁) 3、预防死锁的方法? 一次封锁法:要求每个事务将要使用的数据全部加锁,否则就不能执行 存在的问题: 有些长事务的一些数据对象可能到比较后面才会用到,过早的加锁,影响系统的并发度。 难于确定封锁对象,数据库中的数据是不断变化的,原来不要求封锁的数据对象,在执行过程中可能要求封锁,这就要求对于可能加锁的数据对象加锁,使得本身不需要加锁的数据加锁,势必会让其它会用到该数据的事务等待,同时也进一步降低了系统的并发度。 顺序封锁法:预先对数据对象规定一个封锁顺序(例如B+树从根节点开始逐层分锁),所有的事务都按照这个顺序施行封锁 存在的问题: 维护成本:数据库中的封锁对象很多,并且随着数据库的插入删除操作等不断地变化,维护这样的资源封锁顺序非常困难,维护成本高。 难以实现:事务的封锁请求可以随着事务的执行而动态的决定,很难事先确定每一个事务封锁哪些对象,因此就很难按照规定的顺序去施加封锁。

Python 操作 SQL 数据库 (ORCAL)

扶醉桌前 提交于 2020-03-16 18:37:14
MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单: host:MySQL服务器名 user:数据库使用者 password: 用户登录 密码 db:操作的数据库名 charset:使用的字符集(一般是gb2312) cursor = db.cursor() 其实就是用来获得python执行Mysql命令的方法,也就是 我们所说的操作游标 下面cursor.execute则是真正执行My SQL语句 ,即查询TABLE_PARAMS表的数据。 至于fetchall()则是接收全部的返回结果行 row就是在python中定义的一个变量,用来接收返回结果行的每行数据。同样后面的r也是一个变量,用来接收row中的每个字符,如果写成C的形式就更好理解了 for(string row = ''; row<= cursor.fetchall(): row++) for(char r = ''; r<= row; r++) printf("%c", r); 大致就是这么个意思! 以下实例链接Mysql的TESTDB数据库: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb

python-操作MySQL数据库

帅比萌擦擦* 提交于 2020-03-16 18:36:55
1、安装MySQLdb? 为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL。复制以下代码,并执行: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb 如果执行后的输出结果如下所示,意味着你没有安装 MySQLdb 模块: Traceback (most recent call last): File "test.py", line 3, in <module> import MySQLdb ImportError: No module named MySQLdb 安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-python ,(Linux平台可以访问: https://pypi.python.org/pypi/MySQL-python )从这里可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。 如果您选择二进制文件发行版本的话,安装过程基本安装提示即可完成。如果从源代码进行安装的话,则需要切换到MySQLdb发行版本的顶级目录,并键入下列命令: $ gunzip MySQL-python-1.2.2.tar.gz $ tar -xvf MySQL-python-1.2.2.tar $ cd MySQL-python-1.2.2 $