开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

  在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?       在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VARCHAR2(2) DEFAULT 'XXX';”操作时,效率及安全性是必须要考虑的因素。若直接执行,则会在该过程中给表加上6级表锁,也就是连查询都需要等待,这在生产库上是相当危险的操作。因为Oracle在执行上述操作过程中,不仅要更新数据字典,还会刷新全部的记录,并且会使得Undo表空间暴涨,所以,正确的做法是将更新数据字典和更新字段值分开。 例如,表LKILL.T_KILL约有4500W的数据,直接添加一个字段C_LHR需要花费21分钟,如下所示: 12:20:17 SYS@RACLHR2> ALTER TABLE LKILL.T_KILL ADD C_LHR VARCHAR2(100) DEFAULT 'LHR'; Table altered. Elapsed: 00:21:58.53 若修改为如下的方式,则可以显著提高这个操作的性能,但表中原有的记录对于新添加的列为空,新增记录默认值会设置为LHR,那么原有记录的默认值就需要在系统空闲的时候进行批量更新、批量提交或采用系统包DBMS_PARALLEL_EXECUTE来更新,这样不至于大批量锁表,请参考本书中分批更新的部分【 REF _Ref24783 \n \h 3.1.10.5 REF _Ref24783 \h 分批插入...
小麦苗 发布于 1周前 阅读 87

造成错误“ORA-12547: TNS:lost contact”的常见原因有哪些?

  造成错误“ORA-12547: TNS:lost contact”的常见原因有哪些?       真题1、造成错误“ORA-12547: TNS:lost contact”的常见原因有哪些? 答案:在执行“sqlplus / as sysdba”时可能会报“ORA-12547: TNS:lost contact”的错误,常见原因有如下几点: 1、查看操作系统内核参数是否无误 core file size          (blocks, -c) 0 data seg size           (kbytes, -d) unlimited scheduling priority             (-e) 0 file size               (blocks, -f) unlimited pending signals                 (-i) 16384 max locked memory       (kbytes, -l) 32 max memory size         (kbytes, -m) unlimited open files                      (-n) 1024 pipe size            (512 bytes, -p) 8 POSIX message queues     (bytes, -q) 819200 real-time priority              (-r) 0 stack size              (kbytes, -s) 10240 cpu time               (seconds, -t) unlimited max user processes...
小麦苗 发布于 2周前 阅读 54

hyperledger v1.0.5 区块链入门

hyperledger v1.0.5 区块链入门 本文作者最近在找工作,有意向致电 13113668890 Mr. Neo Chen (陈景峯), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com> 版权 © 2018 http://netkiller.github.io 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。 http://www.netkiller.cn http://netkiller.github.io http://netkiller.sourceforge.net 微信订阅号 netkiller-ebook (微信扫描二维码) QQ:13721218 请注明“读者” QQ群:128659835 请注明“读者”   2018-02-06 摘要 本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。 http://www.netkiller.cn/journal/hyperledger.html 目录 1. what-做什么 2. how-怎么做 2.1. 依赖工具 2.2. 安装Docker 2.3. 安装 Node.js 环境 2.4. 安装 hyperledger 1.0.4 2.5. 手工安装 hyperledger v 1.0.5 开发环境 2.5.1. 登录 docker 2.5.2. Docker 安装 2.5.3. 编译安装 2.6. 启动 docker 虚拟机 2.7. 管理 hyperledger 2.7.1. CouchDB 管理界面 2.8. 部署 chaincode 2.8.1. channel 管理 2.8.1.1. 列出 channel 2.8.1.2. 创建 Channel ...
neo-chen 发布于 2周前 阅读 305 评论 3

以太坊智能合约开发入门

本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。 http://www.netkiller.cn/journal/ethereum.solidity.html
neo-chen 发布于 2周前 阅读 698 评论 1

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要: SQL基础有这些操作(按照执行顺序来排列): from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操作的,那么我们将很容易理解怎么优化SQL写法。 点此查看原文:http://click.aliyun.com/m/41382/ SQL基础有这些操作(按照执行顺序来排列): from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操作的,那么我们将很容易理解怎么优化SQL写法。接下来我们一个一个的谈: from 这个操作是在解析过程中就完成了,目的就是找出输入的表(文件)。 join(left join, right join, inner join, outer join ,semi join) 这个操作需要在参与map和reduce整个阶段。下图给出了各个阶段的数据输入输出变化: 假如执行这个SQL: select student_id, student_name, course_id from student left join student_course on student.student_id = student_course.student_id; 从上面图可以看出当出现数据在某个(某些)key特别集中...
阿里云云栖社区 发布于 3周前 阅读 87

Oracle 11g+Windows10 x64安装、配置过程记录

备注:本想在自己电脑上安装个oracle练习用,但是害怕安装过程中出现问题,而oracle的卸载又是出了名的麻烦,所以用虚拟机搭建了一个跟本机一样的系统,同时记录下安装的每一步。   环境: windows10系统 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系;可以安装plsql,或者直接用命令行操作)   1、oracle下载 * 下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html * 下载文件(版本11g、企业版、两份文件都要下)   2、oracle安装 a.将下载的两个压缩包解压到同一文件夹下,点击解压文件中的setup.exe开始安装   b.安装共分10个步骤。第一步,取消安全更新的勾选,点击“下一步”   c.选择“仅安装数据库软件”,点击“下一步”   d.选择“单实例数据库安装”,点击“下一步”   e.默认选择,点击“下一步”   f.选择“企业版”,点击“下一步”   g.此处选择oracle的安装目录,(就是软件在电脑中的位置),点击“下一步”   h.这里是你之前7个步骤选择的总结,可以在这里检查之前的选择是否错误。确认无误后,点击“下一步”   i.下面就是漫长的等待安装过程了。   j.安装完成...
dfhao 发布于 3周前 阅读 55

IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议

通过本文快速理解服务端数据库的读写分离原理你不应错过,本文也同时建议您在正确理解它的前提下再慎重决定您的服务端架构方案是否需要数据库读写分离,因为很多时候增加缓存策略就能解决的问题,就没有必在大炮打蚊子了。
JackJiang- 发布于 3周前 阅读 171

Elasticell-Multi-Raft实现

Multi-Raft,分布式系统
fagongzi 发布于 1个月前 阅读 149

基于Redis的限流系统的设计

1、概念 In computer networks, rate limiting is used to control the rate of traffic sent or received by a network interface controller and is used to prevent DoS attacks 用我的理解翻译一下:限流是对系统的出入流量进行控制,防止大流量出入,导致资源不足,系统不稳定。 限流系统是对资源访问的控制组件,控制主要的两个功能:限流策略和熔断策略,对于熔断策略,不同的系统有不同的熔断策略诉求,有的系统希望直接拒绝、有的系统希望排队等待、有的系统希望服务降级、有的系统会定制自己的熔断策略,很难一一列举,所以本文只针对限流策略这个功能做详细的设计。 针对找出超出速率阈值的请求这个功能,限流系统中有两个基础概念:资源和策略。 资源 :或者叫稀缺资源,被流量控制的对象;比如写接口、外部商户接口、大流量下的读接口 策略 :限流策略由限流算法和可调节的参数两部分组成 熔断策略:超出速率阈值的请求的处理策略,是我自己理解的一个叫法,不是业界主流的说法。   2、限流算法 限制瞬时并发数 限制时间窗最大请求数 令牌桶   2.1、限制瞬时并发数 定义:瞬时并发数,系统同时处理的请求/事务数量 优点:这个算法能够实现控制并发数的效...
你要的小清新 发布于 1个月前 阅读 615 评论 1 点赞 1

利用ProxySQL实现MySQL的读写分离

一、Proxysql 的基础知识 ProxySQL是一个可以实现MySQL读写分离的轻量级工具。 ProxySQL的特点 将所有配置保存写入到SQLit表中。 支持动态加载配置,即一般可以在线修改配置,但有少部分参数还是需要重启来生效。 支持query cache。 支持对query的路由,可以针对某个语句进行分配去哪个实例执行。 故障切换。 过滤危险的SQL。 不支持分表,可以分库,但是利用规则配置实现分表。 ProxySQL的管理配置 Proxysql中有四层配置: runtime:运行中使用的配置文件 memory:提供用户动态修改配置文件 disk:将修改的配置保存到磁盘SQLit表中(即:proxysql.db) config:一般不使用它(即:proxysql.cnf) 四层配置图: 注释: 一般,修改的配置都是在memory层。可以load到runtime,使配置在不用重启proxysql的情况下也可以生效,也可以save到disk,将对配置的修改持久化。 [1] LOAD MYSQL USERS FROM MEMORY 或 LOAD MYSQL USERS TO RUNTIME [2] SAVE MYSQL USERS TO MEMORY 或 SAVE MYSQL USERS FROM RUNTIME [3] LOAD MYSQL USERS TO MEMORY 或 LOAD MYSQL USERS FROM DISK [4] SAVE MYSQL USERS FROM MEMORY 或 SAVE MYSQL USERS TO DISK [5] LOAD MYSQL USERS FROM CONFIG...
star_glm 发布于 1个月前 阅读 552 点赞 2

在PostgreSQL中秒级完成大表添加带有not null属性并带有default值的实验

近期同事在讨论如何在PostgreSQL中一张大表,添加一个带有not null属性的,且具有缺省值的字段,并且要求在秒级完成。 因为此,有了以下的实验记录: 首先我们是在PostgreSQL 10下做的实验: postgres=# select version(); version --------------------------------------------------------------------------------------------------------- PostgreSQL 10.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11), 64-bit (1 row) 开启计时: postgres=# \timing Timing is on. 建表,并查询表信息,插入数据: postgres=# create table add_c_d_in_ms(id int, a1 text, a2 text, a3 text, a4 text, a5 text, a6 text, a7 text, a8 text not null default 'wangshuo'); CREATE TABLE Time: 72.243 ms postgres=# select oid,relname,relnatts from pg_class where relname='add_c_d_in_ms'; oid | relname | relnatts -------+---------------+---------- 16384 | add_c_d_in_ms | 9 (1 row) Time: 1.504 ms ...
PGSmith 发布于 1个月前 阅读 340 点赞 1

mysql被删除的数据库恢复 binlog恢复数据库

最近真是蛋疼,公司一个客户总是半夜打电话过来,各种问题各种故障,昨天凌晨1点又被吵醒··· 服务器上的mysql数据库里几个重要的表被人恶意删除了,我对mysql并不熟悉,但没办法,硬着头皮也要上。 各种百度…… 因为服务器有前一天备份,客服的众多客户要用,只有先恢复前一天的备份。 恢复之前,把mysql的二进制日志文件下载了下来,只有在本地恢复了。 如果你没有打开二进制日志,那就不要想恢复了···至少我是没查到咋办。 打开方法:mysql配置文件中找到#log-bin=mysql-bin,并取消注释即可。 要用到mysqlbinlog,mysqlbinlog在mysql目录bin里,切换目录后执行mysqlbinlog提示 -bash: mysqlbinlog: command not found 找不到命令,那就先解决这个问题,解决方法: find  / -name mysqlbinlog -print 如图: 只有/www/server/mysql/bin/mysqlbinlog 一条记录,这是我mysql的目录 然后把mysqlbinlog做个软连接到/usr/bin  ln -fs /www/server/mysql/bin/mysqlbinlog /usr/bin 然后再执行find  / -name mysqlbinlog -print查看 你会发现多了一条,报错忽略。现在,就可以正常使用mysqlbinlog了。 我的做法是导出sql文本,在本地恢复,导出方法是: mysqlbinlog ...
天津猫 发布于 1个月前 阅读 317 评论 2 点赞 2

Hive-hiveSQL调优

# 前言 很早以前也是写过hivesql优化分享,但视角都偏狭隘。这篇希望能够从一个比较高层的视角来看待hive优化。勿赘言,影响HiveSQL性能有俩方面: 1. SQL转化成MapReduce的算法以及算法执行路径图是否合理,这部分代码社区大牛对优化也已做多次迭代,提升空间有限,故不是咱聊的主要内容,对mr算法有兴趣的推荐看下《MapReuce设计模式》。另外,如果掌握了MapReduce,且开发者有一定的经验积累可以反推Compiler将SQL转换的MapReduce执行算法,并借助explain来比对你构思的解释计划和实际生成的解释计划是否存在差异,并思考差异的原因是啥,慢慢就能够对生成的算法以及算法执行路径图是否合理给出一个自己的评判,同时也能提升自己SQL,MapReduce的写法造诣的。看这个[例子](https://my.oschina.net/osenlin/blog/500819),博文的第一种方式应该和写hivesql生成的mapreduce算法是差不多的,效率同样也是很低下。第二种就是借助第三方的数据结构来完成,效率提升了俩个量级。有了已经的积累后,会产生对hivesql,mapreduce取舍的问题,考虑后续维护并且对性能要求不太高用hivesql,如果希望把控较高算法性能,并且有一定的代码造诣,用mapreduce。**个人钟爱后者,看到美的...
osenlin 发布于 1个月前 阅读 51

SQL优化-第三章-监控与定位性能问题引发点

## 前言 前面的章节我们聊到从体系结构,逻辑结构,表设计,索引,以及SQL语句都是可以优化的切入点,但是凡事如果能做到在事情发现前做到预防,是否发生能够快速定位,所以这里就列举了日常工作频繁用到的监控类别和能够直接使用的工具,在实际的工作中能够定位大部分的问题,希望能够帮助到大家 ## DBMS各时段主要参数信息 读取数据库系统的在各个小时的redo大小,物理读,逻辑读,SQL解析数,硬解析,事务数。从全局定位问题的时间段和产生问题的大致原因 ``` select s.snap_date, decode(s.redosize, null, '--shutdown or end--', s.currtime) "TIME", to_char(round(s.seconds/60,2)) "elapse(min)", round(t.db_time / 1000000 / 60, 2) "DB time(min)", s.redosize redo, round(s.redosize / s.seconds, 2) "redo/s", s.logicalreads logical, round(s.logicalreads / s.seconds, 2) "logical/s", physicalreads physical, round(s.physicalreads / s.seconds, 2) "phy/s", s.executes execs, round(s.executes / s.seconds, 2) "execs/s", s.parse, round(s.parse / s.seconds, 2) "parse/s", s.hardparse, round(s.hardparse / s.seconds, 2) "hardparse/s", s....
osenlin 发布于 2个月前 阅读 111 点赞 2

MySQL Connector/C++库的使用

一、下载Connector/C++库 官网地址: https://dev.mysql.com/downloads/connector/cpp/ 可以下载源代码自己编译,也可以根据不同的OS环境下载编译好的包,这里下来mysql-connector-c++-1.1.9-linux-ubuntu16.04-x86-64bit.tar.gz 二、解压 这里放在mysql的安装目录/opt/mysql下: $ cd /opt/mysql/ $ sudo tar xzvf ~/mysql-connector-c++-1.1.9-linux-ubuntu16.04-x86-64bit.tar.gz $ sudo ln -s mysql-connector-c++-1.1.9-linux-ubuntu16.04-x86-64bit mysql-connector-c++ 把/opt/mysql/mysql-connector-c++/lib放到动态库搜索路径或用,-rpath=在编译时指定路径。 三、编译运行 建库脚本: -- phpMyAdmin SQL Dump -- version 4.6.4 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Generation Time: 2017-12-30 08:49:43 -- 服务器版本: 5.7.14 -- PHP Version: 5.6.26 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION...
wangxuwei 发布于 2个月前 阅读 61 评论 1 点赞 1

《数据库系统概念》15-可扩展动态散列

静态散列要求桶的数目始终固定,那么在确定桶数目和选择散列函数时,如果桶数目过小,随着数据量增加,性能会降低;如果留一定余量,又会带来空间的浪费;或者定期重组散列索引结构,但这是一项开销大且耗时的工作。为了应对这些问题,为此提出了几种动态散列(dynamic hashing)技术,可扩展动态散列(extendable hashing)便是其一。 一、可扩展动态散列 A)用一个数组来存储桶指针的目录,数组的位数为2的D次方,桶的容量为2的L次方,D和L分别称为全局位深度和局部位深度。每次发生桶溢出时,溢出桶分裂,容量变为2的L+1次方,其它桶的容量保持不变,同时数据目录的深度变为D+1。扩展容量时,只是调整了局部的桶容量和目录的容量,性能开销比较小。 上图中,目录深度为2,目录项有4个。然后开始插入数据d1和d2,假定h(d1)=13、h(d2)=20,由于13=1101,且全局位深度为2,则根据后两位01确定应插入b桶,b桶有空间,可直接插入。20=10100,应插入a桶,但a桶以及满了,于是开始分裂,a桶的局部位深度变为3,容量扩展为8,如果扩展后的局部位深度超过了全局位深度,则全局位深度等于这个最大的局部位深度,于是全局位深度也随之变为3。 如上图所示,a桶分裂为a1、a2,目录变为三位...
zhixin9001 发布于 2个月前 阅读 38

十个实用MySQL函数

十个实用MySQL函数,你要不要进来领走...
andyqian 发布于 2个月前 阅读 2852 评论 6 点赞 6

论——memcached真的有工具可以dump出所有key嘛?

众所周知,memcached并没有像redis那样提供了类似 keys * 的命令来获取所有key,也没有数据持久化,因此memcached想要dump所有的key,需要使用额外的命令组合或工具来实现,但有时命令和工具……也不一定会满足需求。
o翡翠谷o 发布于 2个月前 阅读 146 评论 2

浅谈MySQL表结构设计

很久没写技术文章了,有点手生!
andyqian 发布于 2个月前 阅读 593 评论 6

TiDB 在摩拜单车在线数据业务的应用和实践

> 作者:Mobike / 技术研发部 / 基础平台中心 丁宬杰 胡明 ## 背景 摩拜单车于 2015 年 1 月成立,2016 年 4 月 22 日地球日当天正式推出智能共享单车服务,截至 2017 年 11 月中旬,已先后进入国内外超过 180 个城市,运营着超过 700 万辆摩拜单车,为全球超过 2 亿用户提供着智能出行服务,日订单量超过 3000 万,成为全球最大的智能共享单车运营平台和移动物联网平台。摩拜每天产生的骑行数据超过 30TB,在全球拥有最为全面的骑行大数据,飞速增长的业务使摩拜面临数据库扩展与运维的巨大挑战。 面对飞速增长的并发数与数据量,单机数据库终将因无法支撑业务压力而罢工。在摩拜正式上线以来,我们就在不断思考数据库扩展和运维的未来,近年来业内对数据库进行扩展的常见的方案是通过中间件把数据库表进行水平拆分,将表内数据按照规则拆分到多个物理数据库中。使用这样的中间件方案,在数据库扩容时需要先停下业务,再重构代码,之后进行数据迁移,对于摩拜这样与时间赛跑的创业公司来讲代价巨大,中间件方案对业务过强的侵入性,不支持跨分片的分布式事务,无法保证强一致性事务的特性都使我们望而却步。 摩拜单车于 2017 年初开始使用 TiDB,从最早的 RC3、RC4、PreGA...
TiDB 发布于 2个月前 阅读 63

以太坊智能合约开发入门

本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。 http://www.netkiller.cn/journal/ethereum.solidity.html
neo-chen 发布于 2周前 阅读 698 评论 1

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

FireDAC之TFDStoredProc

TFDStoredProc用来执行存储过程。
业余码农 发布于 3个月前 阅读 8

hyperledger v1.0.5 区块链入门

hyperledger v1.0.5 区块链入门 本文作者最近在找工作,有意向致电 13113668890 Mr. Neo Chen (陈景峯), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com> 版权 © 2018 http://netkiller.github.io 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。 http://www.netkiller.cn http://netkiller.github.io http://netkiller.sourceforge.net 微信订阅号 netkiller-ebook (微信扫描二维码) QQ:13721218 请注明“读者” QQ群:128659835 请注明“读者”   2018-02-06 摘要 本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。 http://www.netkiller.cn/journal/hyperledger.html 目录 1. what-做什么 2. how-怎么做 2.1. 依赖工具 2.2. 安装Docker 2.3. 安装 Node.js 环境 2.4. 安装 hyperledger 1.0.4 2.5. 手工安装 hyperledger v 1.0.5 开发环境 2.5.1. 登录 docker 2.5.2. Docker 安装 2.5.3. 编译安装 2.6. 启动 docker 虚拟机 2.7. 管理 hyperledger 2.7.1. CouchDB 管理界面 2.8. 部署 chaincode 2.8.1. channel 管理 2.8.1.1. 列出 channel 2.8.1.2. 创建 Channel ...
neo-chen 发布于 2周前 阅读 305 评论 3

TiDB 在凤凰网新闻内容业务的创新实践

## 背景 凤凰网(纽交所上市公司,代码:FENG) 是全球领先的跨平台网络新媒体公司,整合旗下综合门户凤凰网、手机凤凰网和凤凰视频三大平台,秉承"中华情怀,全球视野,兼容开放,进步力量"的媒体理念, 为主流华人提供互联网、无线通信、电视网的三网融合无缝衔接的新媒体优质内容与服务。 在媒体行业,新闻内容就是核心的业务数据,我们需要一个稳定的、具有高可用的、易水平扩展的数据存储系统,来存放公司核心数据,在最早,我们采用比较流行的 MySQL 来存储各个业务模块的内容,通过主从切换的方式进行高可用,但随着数据量的增加,MySQL 单机容量成为了瓶颈,传统的基于 MySQL 分片方案在实现及运维都需要比较昂贵的成本,同时 MySQL 主流主从切换方案由于机制问题,在判断“主库真死”,“新主库选举”及“新路由信息广播”上都存在一些不足,整体时间消耗比较大,并不能达到公司核心业务的高可用要求。于是,我们不得不寻找新的解决方案。 ## 选择 TiDB **前期方案选择** 在选择评估初期,我们主要有以下几个考虑点: 1、支持业务弹性的水平扩容与缩容; 2、满足业务故障自恢复的高可用; 3、支持 MySQL 便捷稳定的迁移,不影响线上业务; 4、支持 SQL,尽量少的改...
TiDB 发布于 1个月前 阅读 18

分布式系统的Raft算法

分布式系统的Raft算法     过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑。   来自Stanford的新的分布式协议研究称为Raft,它是一个为真实世界应用建立的协议,主要注重协议的落地性和可理解性。   在了解Raft之前,我们先了解Consensus一致性这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议,一致性协议是为了确保容错性,也就是即使系统中有一两个服务器当机,也不会影响其处理过程。   为了以容错方式达成一致,我们不可能要求所有服务器100%都达成一致状态,只要超过半数的大多数服务器达成一致就可以了,假设有N台服务器,N/2 +1 就超过半数,代表大多数了。   Paxos和Raft都是为了实现Consensus一致性这个目标,这个过程如同选举一样,参选者需要说服大多数选民(服务器)投票给他,一旦选定后就跟随其操作。Paxos和Raft的区别在于选举的具体过程不同。   在Raft中,任何时候一个服务器可以扮演下面角色之一: Leader: 处理所有...
易野 发布于 1个月前 阅读 12

MongoDB——$elemMatch(数组的内嵌文档查询匹配)

创建数据 想要查询,数学成绩在80分以上的人,发现结果并不是我们想要的 默认的查询规则,只要数组中有一个元素满足所给的一条条件,那么这条记录就会匹配成功     使用elemMatch,查询表示,数组中至少有一个元素,满足了所给的所有条件,即找到了一条记录,有数学成绩,并且数学成绩在80分以上
阿豪boy 发布于 6天前 阅读 10

Linux 下 MySQL(Mariadb) 安装与使用

本文简述了一个信息管理系统中 MySQL 数据库的安装与使用,数据库的创建、表的创建,数据的插入等。
freecoder 发布于 2天前 阅读 8

分享几本好书给大家

好书就要分享,你有好书分享给我吗?
andyqian 发布于 4周前 阅读 91

count(1)、count(*) 区别①select * from a ②select b,c,d,e,f from a 两者的执行速度。 当有大量记录的时候②的速度明显的快于① 当记录很

count(1),其实就是计算一共有多少符合条件的行。 1并不是表示第一个字段,而是表示一个固定值。 其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1. 同理,count(2),也可以,得到的值完全一样,count('x'),count('y')都是可以的。一样的理解方式。在你这个语句理都可以使用,返回的值完全是一样的。就是计数。 count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。 MSSql是这样定义的: COUNT(*):返回记录总数,不会读取行上的任何信息, COUNT(1):返回记录总数,但是会在每一行读取1 MySql,只要不是读取行的所有列,还是优先使用COUNT(*)   ①select * from a ②select b,c,d,e,f from a 两者的执行速度。 当有大量记录的时候②的速度明显的快于① 当记录很少的时候①的速度快于② 因为查找的时候 都是从系统表里面在查找,a表的内容都是存在系统表里面的。 select * 会查询所有的系统表 当选择条件后,查找的系统表的数目会减少。     一般情况下,两着返回结果是一样的  假如表沒有主键(Primary key), 那么count(1)比count(*)快  如果有主键的話,...
干干 发布于 2个月前 阅读 105

elasticsearch6.1.1中curl操作索引

新版的elasticsearch在使用curl创建索引的时候报错: :"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406 解决办法:指定请求头即可 curl -H "Content-Type: application/json" -XPUT 'http://127.0.0.1:9200/kc22k2_test' -d '   实例: curl -H "Content-Type: application/json" -XPOST 'http://127.0.0.1:9200/kc22k2_test/cz' -d '{     "akc190" : { "type" : "string", "index" : "not_analyzed" },     "aac001" : { "type" : "string", "index" : "not_analyzed" },     "akc194" : { "type" : "date", "format": "dateOptionalTime" },     "id_drg" : { "type" : "string", "index" : "not_analyzed" },     "name_drg" : { "type" : "string", "index" : "not_analyzed" },     "id_mdc" : { "type" : "string", "index" : "not_analyzed" },     "name_mdc" : { "type" : "string", "index" : "not_analyzed" } }' --官网实例: curl -XPUT 'localhost:9200/test?pretty' -H 'Content-Type: application/json' -d' {     "settings" : {         "number_of_shards" : 1     },    ...
Sheav 发布于 1个月前 阅读 17

《数据库系统概念》20-恢复系统

计算机系统因磁盘、电源、软件等的原因发生故障时,会造成数据库系统信息的丢失。此外,事务也可能因各种原因失败,如破坏了完整性约束或发生了死锁。数据库系统的一个重要组成部分就是恢复机制,它负责检测故障以及将数据库恢复至故障发生前的某一状态。 一旦故障发生,数据库系统的状态可能不再一致,即它不能反映数据库试图保存的现实世界的状态,为保持一致性,要求每个事务都必须是原子的。恢复机制的职责就是要保证原子性和持久性。 一、在基于日志的机制中,所有的更新都计入日志,并存放在稳定存储器中。当事务的最后一个日志记录(即commit日志记录)输出到稳定存储器时,就认为这个事务已提交。 日志记录包括所有更新过的数据项的旧值和新值。当系统崩溃后需要对更新进行重做时,就使用新值,如果需要回滚事务,就使用旧值。 在延迟修改机制中,事务执行时所有write操作要延迟到事务提交时才执行,那时系统在执行延迟写中会用到日志中与该事务有关的信息。在延迟修改机制中,日志记录不需要包含已更新的数据项的旧值。 为了减少搜索日志和重做事务的开销,还可以使用检查点技术。在恢复阶段,只需重演自最后一个已完成的检查点之后的正常操作中所做的所有动作。 ...
zhixin9001 发布于 3周前 阅读 6

腾讯云时序数据库 CTSDB 开放公测

欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:  李晓慧  近日,腾讯云推出云上时序数据库CTSDB(Cloud Time Series Database),CTSDB 是一款分布式、可扩展、高可靠的时序数据库,适用于有海量时序数据的物联网、大数据分析和互联网监控等场景。CTSDB目前已经在广州、北京和上海地域开放公测申请(点击了解详情),计划于2018年3月下旬正式上线。 时序数据库CTSDB能够提供高性能读写、低成本存储、聚合分析、实例监控以及数据查询结果可视化等功能。整个系统采用多节点多副本的部署方式,有效保证了数据的高可用性和安全性。CTSDB目前已经成功运用于腾讯内部20多个核心业务(微信彩票、财付通、腾讯云监控、腾讯云负载均衡等)。其中,在腾讯云监控每秒百万级数据点的写入压力、每天20TB+数据量的写入场景下稳定运行,足以证明其可以稳定支撑各种海量数据场景。CTSDB致力于帮助企业用户更简便、快捷处理海量数据,高效提升业务反馈。 到底什么是时序数据?时序数据库对于时序数据的处理存在什么样的意义呢? 时序数据就是指时间序列数据,是同一指标按时间顺序记录的数据列。例如:工厂生产线上某台机器每分钟的温度数据组成的时序数据,互联网日志系统...
云加社区 发布于 3周前 阅读 10

Centos下安装MongoDB数据库

1.解压版安装 获取安装包: ``` wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.2.tgz ``` 解压: ``` tar zxvf mongodb-linux-x86_64-rhel70-3.6.2.tgz ``` ``` [root@localhost mongodb]# ls mongodb-linux-x86_64-rhel70-3.6.2 mongodb-linux-x86_64-rhel70-3.6.2.tgz ``` 重命名解压的文件夹 ``` [root@localhost mongodb]# mv mongodb-linux-x86_64-rhel70-3.6.2 mongdb ``` 创建在mongodb下创建bin、conf、data、log分别存放可执行文件、配置文件、数据文件和日志文件 ``` [root@localhost mongodb]# mkdir data [root@localhost mongodb]# mkdir log [root@localhost mongodb]# mkdir bin [root@localhost mongodb]# mkdir conf [root@localhost mongodb]# ls bin conf data log mongodb mongodb-linux-x86_64-rhel70-3.6.2.tgz ``` 将mongdb/bin目录下的mongod和mongo命令复制到bin目录下 在conf下创建mongod.conf配置文件 ``` bind_ip=0.0.0.0 port = 27017 dbpath = /usr/local/mongodb/data/ logpath = /usr/local/mongodb/log/mongod.log fork = true ``` bind_ip:绑定的ip地址 port:mongodb使用的端口 dbpath和logpath分别指数据文...
日落北极 发布于 2周前 阅读 10

游标

在PL/SQL块中执行CRUD语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个工作区(Work Area),或是一种结构化数据类型。 1.显式游标。即用户自定义游标,用于处理select语句返回的多行数据 ``` declare cursor cur_emp(i_job varchar2) is select employee_id, job_id from employees where job_id = i_job; v_emp cur_emp%rowtype; begin open cur_emp('ST_CLERK'); loop fetch cur_emp into v_emp; exit when cur_emp%notfound; dbms_output.put_line(v_emp.employee_id || v_emp.job_id); end loop; close cur_emp; end; ``` > cursor_name%ISOPEN 游标是否打开 cursor_name%FOUND 最近的FETCH是否提取到数据 cursor_name%NOTFOUND 最近的FETCH是否没有提取到数据 cursor_name%ROWCOUNT 返回到目前为止,已经从游标缓冲区中提取到数据的行数 2.隐式游标。系统自动定义的游标,记录集只有单行数据,用于处理select into 和DML语句 ``` DECLARE v_rows NUMBER; BEGIN UPDATE employees SET salary = 2333 WHERE department_id = 90 AND job_id = 'AD_VP'; dbms_output.put_line('更新了' || SQL%rowcount || ...
海贼爱音乐 发布于 3个月前 阅读 5

利用ProxySQL实现MySQL的读写分离

一、Proxysql 的基础知识 ProxySQL是一个可以实现MySQL读写分离的轻量级工具。 ProxySQL的特点 将所有配置保存写入到SQLit表中。 支持动态加载配置,即一般可以在线修改配置,但有少部分参数还是需要重启来生效。 支持query cache。 支持对query的路由,可以针对某个语句进行分配去哪个实例执行。 故障切换。 过滤危险的SQL。 不支持分表,可以分库,但是利用规则配置实现分表。 ProxySQL的管理配置 Proxysql中有四层配置: runtime:运行中使用的配置文件 memory:提供用户动态修改配置文件 disk:将修改的配置保存到磁盘SQLit表中(即:proxysql.db) config:一般不使用它(即:proxysql.cnf) 四层配置图: 注释: 一般,修改的配置都是在memory层。可以load到runtime,使配置在不用重启proxysql的情况下也可以生效,也可以save到disk,将对配置的修改持久化。 [1] LOAD MYSQL USERS FROM MEMORY 或 LOAD MYSQL USERS TO RUNTIME [2] SAVE MYSQL USERS TO MEMORY 或 SAVE MYSQL USERS FROM RUNTIME [3] LOAD MYSQL USERS TO MEMORY 或 LOAD MYSQL USERS FROM DISK [4] SAVE MYSQL USERS FROM MEMORY 或 SAVE MYSQL USERS TO DISK [5] LOAD MYSQL USERS FROM CONFIG...
star_glm 发布于 1个月前 阅读 552 点赞 2

Hive命令行常用操作(数据库/表操作)

一、数据库操作; 1.1:查看所有的数据库: hive>show databases; 1.2:使用数据库default; hive>use default; 1.3:查看数据库信息: hive>describe database default; 1.4:显示的展示当前使用的数据库:hive>set hive.cli.print.current.db=true; 1.5:Hive显示表中标题行: hive>set hive.cli.print.header=true; 1.6:创建数据库命令: hive>create database test; 1.7:切换当前的数据库: hive>use test; 1.8:删除数据库: 删除数据库的时候,不允许删除有数据的数据库,如果数据库里面有数据则会报错。如果要忽略这些内容,则在后面增加CASCADE关键字,则忽略报错,删除数据库。Restrict关键字是默认情况,即如果有表存在,则不允许删除数据库。 hive> drop database dbname [CASCADE|RESTRICT] (可选);  hive> drop database if exists dbname CASCADE; 1.9:hive在HDFS上的默认存储路径: Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse. 2.0:Hive中的数据库在HDFS上的存储路径为:${hive.metastore.warehouse.dir}/dbname.db;    其中,hive.metastore.warehouse.dir的默认值是...
Avner 发布于 1个月前 阅读 16

mycat flink

1.mycat 结合flink做数据聚合 排序 关联查询功能 2.升级druid 1.1.5
Fx_demon 发布于 3个月前 阅读 11 评论 1

group by 分组之后,取组内时间最新的记录

图中是未分组之前原始数据。 现在的需求是,按照某个字段分组之后,取时间最新的一条记录。 思路: 最后在e中使用f分组字段,和最新时间过滤出按照想要的结果。
itlzm 发布于 1个月前 阅读 17

在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

  在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?       在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VARCHAR2(2) DEFAULT 'XXX';”操作时,效率及安全性是必须要考虑的因素。若直接执行,则会在该过程中给表加上6级表锁,也就是连查询都需要等待,这在生产库上是相当危险的操作。因为Oracle在执行上述操作过程中,不仅要更新数据字典,还会刷新全部的记录,并且会使得Undo表空间暴涨,所以,正确的做法是将更新数据字典和更新字段值分开。 例如,表LKILL.T_KILL约有4500W的数据,直接添加一个字段C_LHR需要花费21分钟,如下所示: 12:20:17 SYS@RACLHR2> ALTER TABLE LKILL.T_KILL ADD C_LHR VARCHAR2(100) DEFAULT 'LHR'; Table altered. Elapsed: 00:21:58.53 若修改为如下的方式,则可以显著提高这个操作的性能,但表中原有的记录对于新添加的列为空,新增记录默认值会设置为LHR,那么原有记录的默认值就需要在系统空闲的时候进行批量更新、批量提交或采用系统包DBMS_PARALLEL_EXECUTE来更新,这样不至于大批量锁表,请参考本书中分批更新的部分【 REF _Ref24783 \n \h 3.1.10.5 REF _Ref24783 \h 分批插入...
小麦苗 发布于 1周前 阅读 87

以太坊智能合约开发入门

本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。 http://www.netkiller.cn/journal/ethereum.solidity.html
neo-chen 发布于 2周前 阅读 698 评论 1

mongodb安装

在centos中安装mongodb 官网文档: [Install MongoDB Community Edition on Red Hat Enterprise or CentOS Linux](https://docs.mongodb.com/master/tutorial/install-mongodb-on-red-hat/) [centos7安装MongoDB3.4](https://www.cnblogs.com/web424/p/6928992.html) 有配置参数的详细介绍 [在 CentOS7 上安装 MongoDB](http://www.linuxidc.com/Linux/2016-06/132675.htm) 可以参考这篇文章的配置 [CentOS 7 yum方式快速安装MongoDB](http://blog.51cto.com/55757353/1907058) [centos7 下安装MongoDB](https://www.cnblogs.com/weiweictgu/p/5517717.html)
miaojiangmin 发布于 7天前 阅读 9

在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

  在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?       在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VARCHAR2(2) DEFAULT 'XXX';”操作时,效率及安全性是必须要考虑的因素。若直接执行,则会在该过程中给表加上6级表锁,也就是连查询都需要等待,这在生产库上是相当危险的操作。因为Oracle在执行上述操作过程中,不仅要更新数据字典,还会刷新全部的记录,并且会使得Undo表空间暴涨,所以,正确的做法是将更新数据字典和更新字段值分开。 例如,表LKILL.T_KILL约有4500W的数据,直接添加一个字段C_LHR需要花费21分钟,如下所示: 12:20:17 SYS@RACLHR2> ALTER TABLE LKILL.T_KILL ADD C_LHR VARCHAR2(100) DEFAULT 'LHR'; Table altered. Elapsed: 00:21:58.53 若修改为如下的方式,则可以显著提高这个操作的性能,但表中原有的记录对于新添加的列为空,新增记录默认值会设置为LHR,那么原有记录的默认值就需要在系统空闲的时候进行批量更新、批量提交或采用系统包DBMS_PARALLEL_EXECUTE来更新,这样不至于大批量锁表,请参考本书中分批更新的部分【 REF _Ref24783 \n \h 3.1.10.5 REF _Ref24783 \h 分批插入...
小麦苗 发布于 1周前 阅读 87

hyperledger v1.0.5 区块链入门

hyperledger v1.0.5 区块链入门 本文作者最近在找工作,有意向致电 13113668890 Mr. Neo Chen (陈景峯), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com> 版权 © 2018 http://netkiller.github.io 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。 http://www.netkiller.cn http://netkiller.github.io http://netkiller.sourceforge.net 微信订阅号 netkiller-ebook (微信扫描二维码) QQ:13721218 请注明“读者” QQ群:128659835 请注明“读者”   2018-02-06 摘要 本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。 http://www.netkiller.cn/journal/hyperledger.html 目录 1. what-做什么 2. how-怎么做 2.1. 依赖工具 2.2. 安装Docker 2.3. 安装 Node.js 环境 2.4. 安装 hyperledger 1.0.4 2.5. 手工安装 hyperledger v 1.0.5 开发环境 2.5.1. 登录 docker 2.5.2. Docker 安装 2.5.3. 编译安装 2.6. 启动 docker 虚拟机 2.7. 管理 hyperledger 2.7.1. CouchDB 管理界面 2.8. 部署 chaincode 2.8.1. channel 管理 2.8.1.1. 列出 channel 2.8.1.2. 创建 Channel ...
neo-chen 发布于 2周前 阅读 305 评论 3

MongoDB 固定集合

创建 db.createCollection( 'fix', { capped:true, size:1000, max:5 } ) size 是整个集合空间大小,单位为【KB】 max 是集合文档个数上线,单位是【个】   插入原始数据 db.txt.insertMany( [ {a:3}, {a:1}, {a:2}, {a:4}, {a:5}, ] )   固定集合类似定长的队列,如果加入元素后超过指定的大小,会将头部元素删除 db.fix.insert({a:11})  
阿豪boy 发布于 4天前 阅读 9

MongoDB 查询2

数组条件查询,找到2012年和2017年的电影   只要country数组中有中国或日本的一个就表示匹配成功,返回整个文档   数组元素的增加,使用update和push,向数组中加入新元素,可以加入重复值 db.stu.update( {'name':'aaa'}, {$push:{ 'score':5 }} )   使用update和addToSet 向数组中加入元素,如果该元素存在,则不会加入进去 db.stu.update( {name:'aaa'}, {$addToSet:{ score:4 }} )     查询电影标签数组中,元素属性含有name值为动画的电影   使用$push,将各个分段的电影名称显示出来   查找含有动画标签的电影数目   查询两个属性数组中含有动画的电影数目,使用or   多重分组查询,查询每年的不同评分电影数目,使用mapReduce 使用聚合函数aggregate,速度比mapReduce快很多,但缺少定制化,比如无法处理字段缺失问题   使用mapRedduce 计算各个分段的电影数目,默认汇总字段使用value   使用aggregate达到同样的效果,但效率更高,速度更快   计算每个用户2016-06-01这天的消费金额,先查找在该日期有消费的记录,然后用用户id作为分组的key,花费作为values,输入到reduce中进行汇总 db.consume.map...
阿豪boy 发布于 7天前 阅读 7 评论 2

OLAP基础

联机分析处理
仔仔1993 发布于 1周前 阅读 12

Windows安装MongoDB数据库

    最近想学习NodeJs,在网上逛了逛,大部分都倾向于NodeJs和MongoDB是绝配的说法,于是自己也捣鼓了一下MongoDB安装的方式,希望能跟大家分享一下,不当之处敬请见谅,若理解有误,欢迎大家指正。 一、下载:     我安装的是MongoDB 3.2版本:mongodb-win32-x86_64-2008plus-ssl-v3.2-latest-signed.msi     下载地址:http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-v3.2-latest-signed.msi      其他版本下载:https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl 二、安装     安装过程就跟安装普通软件没什么两样,下载完成后,基本一直点击next就可以,如果自己需要定义安装路径的话,可以选择custom安装模式,然后browe选择安装路径 我安装的路径在:D:\Program Files\MongoDB\Server\3.2 现在点击:D:\Program Files\MongoDB\Server\3.2\bin下面的mongod.exe会一闪而过,原因是mongo不会自动创建db文件保存的目录,我们需要在当前盘的根目录下创建data\db文件夹,我创建的文件夹为:D:\data\db。 再次点击mongod.exe即可启动服务,mongodb默认端口是27017,我们打开浏览器访问:http://127.0.0.1:27017/,如果显示: It l...
shonve 发布于 3天前 阅读 5

Linux 下 MySQL(Mariadb) 安装与使用

本文简述了一个信息管理系统中 MySQL 数据库的安装与使用,数据库的创建、表的创建,数据的插入等。
freecoder 发布于 2天前 阅读 8

mysql 两种连接方式:socket和TCP/IP

参考mysql 连接方式:socket和tcp/ip unix系统上,mysql的登陆方式有两种,分别是socket和tcp/ip方式登陆。 当server和client在同一台服务器上的时候,我们可以直接用mysql命令登陆。 [root@mysql ~]# mysql Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.46-log MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. root@[(none)]> 当什么参数都没有指定的时候,mysql默认使用socket方式登陆,如果my.cnf的[client]没有指定socket文件路径时,mysql默认会去寻找/tmp/mysql.sock,所以如果mysql服务启动的时候,生成的socket文件不是默认路径的话,登陆会报错。 [root@mysql ~]# mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) mysql服务启动的时候...
为了美好的明天 发布于 2周前 阅读 18

mysql中查看数据表占的存储空间

mysql table 占用空间
janl 发布于 7天前 阅读 6

MongoDB——$elemMatch(数组的内嵌文档查询匹配)

创建数据 想要查询,数学成绩在80分以上的人,发现结果并不是我们想要的 默认的查询规则,只要数组中有一个元素满足所给的一条条件,那么这条记录就会匹配成功     使用elemMatch,查询表示,数组中至少有一个元素,满足了所给的所有条件,即找到了一条记录,有数学成绩,并且数学成绩在80分以上
阿豪boy 发布于 6天前 阅读 10

Hive 新特性 LLAP

Hive 新特性 LLAP
osenlin 发布于 1周前 阅读 11

Oracle 11g Express Edition 安装及常见问题

对于一个Oracle初学者来说,使用Oracle 11g Express Edition 版本感觉足够了,而且感觉安装过程好像简单很多的样子。 下载压缩文件,解压,找到setup.exe双击安装,除了改改安装路径,其他一路默认。 安装完毕使用普通用户登录Oracle, 普通用户名/密码: scott/tiger 由于普通用户默认被锁定,所以需要进行如下操作解锁: + 首先用system用户登入:SQL>conn sys/密码 as sysdba +导入scott.sql脚本(可以在oracle的安装目录中查找),例如我本机的路径,导入就可以写成:@H:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql + 其次输入: alter user scott identified by tiger;  --修改scott密码 + alter user scott account unlock;  --解锁用户 + conn scott/tiger (以scott用户登录)  show user (看看当前用户是否是scott) SELECT * FROM emp; 那么我们就可以查看到emp表的完整内容。为了更好的显示表的内容,可以设置显示属性: SET LINESIZE 300; 至此Oracle安装完毕,可以全力出发开始Oracle探索和开发之旅! 参考: 在 Windows 下安装 Oracle 11g XE (Express Edition) Oracle 11g Express Edition 在Window上的安装 Oracle 11g Express 安...
圣洁之子 发布于 6天前 阅读 4

MAC安装mysql总结

使用mysqladmin命令修改MySQL密码与忘记密码
spinachgit 发布于 1个月前 阅读 11

Oracle 11g+Windows10 x64安装、配置过程记录

备注:本想在自己电脑上安装个oracle练习用,但是害怕安装过程中出现问题,而oracle的卸载又是出了名的麻烦,所以用虚拟机搭建了一个跟本机一样的系统,同时记录下安装的每一步。   环境: windows10系统 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系;可以安装plsql,或者直接用命令行操作)   1、oracle下载 * 下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html * 下载文件(版本11g、企业版、两份文件都要下)   2、oracle安装 a.将下载的两个压缩包解压到同一文件夹下,点击解压文件中的setup.exe开始安装   b.安装共分10个步骤。第一步,取消安全更新的勾选,点击“下一步”   c.选择“仅安装数据库软件”,点击“下一步”   d.选择“单实例数据库安装”,点击“下一步”   e.默认选择,点击“下一步”   f.选择“企业版”,点击“下一步”   g.此处选择oracle的安装目录,(就是软件在电脑中的位置),点击“下一步”   h.这里是你之前7个步骤选择的总结,可以在这里检查之前的选择是否错误。确认无误后,点击“下一步”   i.下面就是漫长的等待安装过程了。   j.安装完成...
dfhao 发布于 3周前 阅读 55

MongoDB 简单修改操作

修改器$inc 修改器格式{$inc:{filed:value}},该修改器可以用来修改value为数字类型的值,为指定的键对应的数值进行加减 修改年龄字段,使其增加4,这个增加值可以是负数    修改器$unset 修改器格式{$unset:{filed:1}},该修改器可将指定的键删除,field后面对应的可以填0,也可以填1或其他数值,但效果都是将该键从这条数据中删除 删除age字段 修改器$pushhe$pushAll $push是向数据中添加新的数据,但是{$push:{filed:value}}中的field应为数组类型的,如果field不是数组类型的,就会出错,如果filed不存在,则创建该数组类型并插入数据,而$pushAll是向数据中添加数组数据 添加数据22 结果,push会将对象直接放入数组中 使用each修饰符 可以将对象逐个放入数组 不使用each时,将整个数组作为整体     修改器$addToSet,与push相似,但是相同的数据元素不会被加入数组 {$addToSet:{filed:value}}向field目标数组中添加数据,如果目标驻足中已存在value,则什么都不操作,如不存在则添加进去     修改器$pop 修改器格式{$pop:{filed:value}},field为数组类型,value为1或者-1,当value为1时,删除指定数组的最后一个值,value为-1 删除指定数组第一个值   修改器$pu...
阿豪boy 发布于 6天前 阅读 6

Mysql 5.7.20 无法修改密码解决办法

重装系统下载了Mysql 5.7.20版本   配置启动完成发现一直无法修改密码。 首先使用  update user set password=password('123456') where user='root'; 命令修改,报错如下图: 然后改用  update mysql.user set authentication_string=password('123') where user='root' and Host ='localhost'; 命令提示修改成功。 但是退出后重新使用新密码登录报错: 然后上网搜了多篇博客试过各种方法,发现解决办法: 首先进入Mysql,执行 use mysql;命令, 然后使用  update mysql.user set authentication_string=password('123') where user='root' and Host = 'localhost'; 修改登录密码, 完成后执行 flush privileges; 命令来保存。完成修改密码: 至此就可以使用新密码登录   用点小麻烦开始第一篇博客。
Margin- 发布于 1个月前 阅读 40

MongoDB 小结

小结 https://www.cnblogs.com/cswuyg/p/4595799.html 常见问题 http://www.cnblogs.com/cswuyg/p/4355948.html 1、shell登陆和显示 假设在本机上有一个端口为17380的MongoDB服务,假设已经把mongo bin文件加入到系统PATH下。 登陆:mongo --port 17380        显示DB:show dbs 进入某DB:use test_cswuyg 显示集合:show tables 2、简单查找 查找文档:db.test_mac_id.find({'a':  'b'}) 删除文档:db.test_mac_id.remove({'a': 'b'}) 查找找到某一天的数据: db.a.find({'D' :  ISODate('2014-04-21T00:00:00Z')}) 或者 db.a.find({'D' :  ISODate('2014-04-21')}) 删除某一天的数据: db.region_mac_id_result.remove({"D" :  ISODate('2014-04-17')}) 小于2014.6.5的数据: db.xxx.find({E: {$lt :ISODate('2014-06-05')}}) 大于等于2014.6.1的数据: db.xxx.find({E: {$gte: ISODate("2014-05-29")}}).count() 两个条件: db.xxx.find({E:{$gte: ISODate("2014-05-29"), $lte: ISODate("2014-06-04")}}).count() json中的嵌套对象查询,采用“点”的方式: mongos> db.wyg.find({"a.b": {$exists: true}}) { "_id" : "c", "a" : { "b" : 10 } } 某个字段...
阿豪boy 发布于 6天前 阅读 7

FireDAC之TFDStoredProc

TFDStoredProc用来执行存储过程。
业余码农 发布于 3个月前 阅读 8

Linux 下 MySQL(Mariadb) 安装与使用

本文简述了一个信息管理系统中 MySQL 数据库的安装与使用,数据库的创建、表的创建,数据的插入等。
freecoder 发布于 2天前 阅读 8

Windows安装MongoDB数据库

    最近想学习NodeJs,在网上逛了逛,大部分都倾向于NodeJs和MongoDB是绝配的说法,于是自己也捣鼓了一下MongoDB安装的方式,希望能跟大家分享一下,不当之处敬请见谅,若理解有误,欢迎大家指正。 一、下载:     我安装的是MongoDB 3.2版本:mongodb-win32-x86_64-2008plus-ssl-v3.2-latest-signed.msi     下载地址:http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-v3.2-latest-signed.msi      其他版本下载:https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl 二、安装     安装过程就跟安装普通软件没什么两样,下载完成后,基本一直点击next就可以,如果自己需要定义安装路径的话,可以选择custom安装模式,然后browe选择安装路径 我安装的路径在:D:\Program Files\MongoDB\Server\3.2 现在点击:D:\Program Files\MongoDB\Server\3.2\bin下面的mongod.exe会一闪而过,原因是mongo不会自动创建db文件保存的目录,我们需要在当前盘的根目录下创建data\db文件夹,我创建的文件夹为:D:\data\db。 再次点击mongod.exe即可启动服务,mongodb默认端口是27017,我们打开浏览器访问:http://127.0.0.1:27017/,如果显示: It l...
shonve 发布于 3天前 阅读 5

MongoDB TTL 索引

超时索引的使用,其所索引字段事件格式必须是ISOData,否则不会生效   1,db.log_events.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } ) 其中,log_events是表名,expireAt是索引所在的字段,为Date格式,expireAfterSeconds表示0秒之后过期。该方式,可以传入一个过期时间到数据库中,到了指定时间,数据即删除   2,db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } ) 其中,log_events是表名,createdAt是索引所在的字段,为Date格式,expireAfterSeconds表示3600秒之后过期。该方式,可以传入一个当前时间到数据库中,到了1小时候,即删除该数据   MongoDB 每分钟清理一次超时索引,所以最好时间的最小单位是分钟 创建索引,在指定的地段创建索引,指定经过10s后,删除该文档 db.stu.createIndex( {'lastLogin': 1}, {expireAfterSeconds: 10} )   插入数据,一定要使用new Date(),不能使用Date()!!!!!!!!!! db.stu.insert({ 'lastLogin':new Date() }) 查看数据 经过指定的时间后超时的文档消失了 查看索引信息   创建数据,注意需要转换时间格式 添加索引,时限设置为0,表示在该字...
阿豪boy 发布于 4天前 阅读 5

MongoDB 全文索引

全文索引的创建方法: db.ensureIndex({key:"text"}) db.ensureIndex({key1:"text",key2:"text"}) db.ensureIndex({"$**":"text",key2:"text"}) mongodb全文索引查询的用法: db.article.find({$text:{$search:"coffee"}}) #查询包含coffee的内容的文档 db.article.find({$text:{$search:"aa bb cc"}}) #(或查询)查询包含aa或bb或cc的内容的文档 db.article.find({$text:{$search:"aa bb -cc"}}) #-为排除包含有cc内容的文档 db.article.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}}) #(与查询)加查询内容前加上\",查询既包含aa又包含bb cc的内容的文档。 全文索引的限制: 一个集合只能创建一个全文索引,每次查询只能指定一个$text查询 $text不能出现在$nor查询中 查询如果包含了$text,$hint不起作用 不支持中文全文检索   创建数据 创建索引,指定权重    ...
阿豪boy 发布于 4天前 阅读 6

MongoDB 固定集合

创建 db.createCollection( 'fix', { capped:true, size:1000, max:5 } ) size 是整个集合空间大小,单位为【KB】 max 是集合文档个数上线,单位是【个】   插入原始数据 db.txt.insertMany( [ {a:3}, {a:1}, {a:2}, {a:4}, {a:5}, ] )   固定集合类似定长的队列,如果加入元素后超过指定的大小,会将头部元素删除 db.fix.insert({a:11})  
阿豪boy 发布于 4天前 阅读 9

MongoDB 索引基础

制造数据   查找某个数据,没有索引的时候,用的遍历查找,由于不知道满足条件的文档有多少,所以遍历了全部文档 使用 limit,只需要找到一个即可,所以遍历了1001个文档   skip是在查询结果中跳跃指定数目的文档 limit也是在结果中选取指定数目 sort是对整个文档排序 对比使用sort的时候,不使用只是扫描3个文档,使用的话由于需要排序,所以讲所有文档都扫描了一遍     MongoDB使用ensureIndex添加索引 在name字段添加索引 db.stu.ensureIndex({'name':1}) 再次查询,会发现遍历的文档数目小了很多   不进行操作的执行计划,将explain放在前面,不会去具体执行修改操作,只会返回执行计划信息
阿豪boy 发布于 4天前 阅读 7

MongoDB 执行计划基础

https://docs.mongodb.com/manual/reference/method/db.collection.explain/index.html 简单使用,默认提供的是查询计划模式,在这里我们使用allPlansExecution返回所有信息 db.stu .find({name:'s1000'}).explain('allPlansExecution') 一、db.collection.explain()简介 支持下列操作返回查询计划 aggregate(); count(); distinct(); find(); group(); remove(); update() cursor.explain(verbosity) 为一个游标返回其查询执行计划(Reports on the query execution plan for a cursor) cursor.explain(verbosity) 最通常的行式为db.collection.find().explain()。其中verbosity说明返回信息的粒度。 执行计划中几类常见的操作描述 COLLSCAN 全表扫描 IXSCAN 索引扫描 FETCH 根据索引去检索文档 SHARD_MERGE 合并分片结果 db.collection.find().explain(verbose) explain()输出一个以文档形式展现的执行计划,可以包括统计信息(可选)。 参数verbose: 可选参数。缺省值为queryPlanner,用于查看指定执行计划的特定部分。即给定不同的参数则输出信息的详细...
阿豪boy 发布于 4天前 阅读 6

MongoDB 查询基础

MongoDB的find查询条件中无法使用文档中的变量 比如无法查询集合中,a字段和b字段值相等的文档 只能通过自定义函数,由于使用了this,所以不能使用箭头函数,否则会修改this的值   取模和非,找数值模3后余数不为1的文档   null 的匹配 直接查找时,不仅会匹配到b属性为null的文档,而且会匹配到b属性不存在的文档,使用exist表示该字段存在 找到存在b字段并且值为null的文档   limit,skip,和sort语句的顺序可以任意,都会返回一样的结果   常见操作符 $gt 语法:{<field>: {$gt: <value>} } 释义:匹配大于(>)指定值的文档 $gte 语法:{field: {$gte: value} } 释义:匹配大于等于(>=)指定值的文档 $lt 语法:{field: {$lt: value} } 释义:匹配小于(<)指定值的文档 $lte 语法:{ field: { $lte: value} } 释义:匹配小于等于(<=)指定值的文档 $ne 语法:{field: {$ne: value} } 释义:匹配不等于(≠)指定值的文档 $in 语法:{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } 释义:匹配数组中的任一值 $nin 语法:{ field: { $nin: [ <value1>, <value2> ... <valueN> ]} } 释义:不匹配数组中的值   $or 语法:{ $or...
阿豪boy 发布于 4天前 阅读 4

MongoDB 基础 操作

获取Collection db.getCollection('stu').find() 使用属性的方式获取 db['stu'].find()   批量插入数据时,如果出错, 原数据库中,已经有_id=1的数据了,但是这条语句依然将前三条存入进去了 但是第四条记录没存进去   删除记录,使用drop比remove快,但是remove更加灵活 插入一万条数据 先构建数组,然后批量添加比一条条添加快的多!!! 批量操作比逐条操作运行的更快   使用$set和$unset添加删除键   $inc 指定字段增加指定的增量,如果字段不存在,则创建并且初始值为增量,如果字段存在,则增加指定的增量,增量可以为负值   $push 会在指定的字段(该字段类型必须为数组),末尾插入一个元素,如果字段不存在则创建并且初始化为一个元素的数组,可以使用each修饰符,将一个数组中的元素逐个添加进去   $addToSet 会将数组中没有的值放进去,,可以搭配each 使用   数组定位操作符 $表示匹配成功的数组下标 使用$定位操作符进行数组的修改   upsert 按照指定条件查询,如果找到文档,则执行修改操作,如果没有找到,则新建文档 update第三个参数为true,表示执行的是upsert 没有找到,则会重新创建一个   如果再次运行,则匹配成功,会在找到的文档中修改数...
阿豪boy 发布于 5天前 阅读 7

Oracle 11g Express Edition 安装及常见问题

对于一个Oracle初学者来说,使用Oracle 11g Express Edition 版本感觉足够了,而且感觉安装过程好像简单很多的样子。 下载压缩文件,解压,找到setup.exe双击安装,除了改改安装路径,其他一路默认。 安装完毕使用普通用户登录Oracle, 普通用户名/密码: scott/tiger 由于普通用户默认被锁定,所以需要进行如下操作解锁: + 首先用system用户登入:SQL>conn sys/密码 as sysdba +导入scott.sql脚本(可以在oracle的安装目录中查找),例如我本机的路径,导入就可以写成:@H:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql + 其次输入: alter user scott identified by tiger;  --修改scott密码 + alter user scott account unlock;  --解锁用户 + conn scott/tiger (以scott用户登录)  show user (看看当前用户是否是scott) SELECT * FROM emp; 那么我们就可以查看到emp表的完整内容。为了更好的显示表的内容,可以设置显示属性: SET LINESIZE 300; 至此Oracle安装完毕,可以全力出发开始Oracle探索和开发之旅! 参考: 在 Windows 下安装 Oracle 11g XE (Express Edition) Oracle 11g Express Edition 在Window上的安装 Oracle 11g Express 安...
圣洁之子 发布于 6天前 阅读 4

MongoDB——$elemMatch(数组的内嵌文档查询匹配)

创建数据 想要查询,数学成绩在80分以上的人,发现结果并不是我们想要的 默认的查询规则,只要数组中有一个元素满足所给的一条条件,那么这条记录就会匹配成功     使用elemMatch,查询表示,数组中至少有一个元素,满足了所给的所有条件,即找到了一条记录,有数学成绩,并且数学成绩在80分以上
阿豪boy 发布于 6天前 阅读 10

MongoDB 聚合 aggregate

MongoDB的聚合框架实现sum()、avg()、group by等聚合操作。通过聚合框架,还可对返回的结果进行处理,实现一些特殊需求,例如数据过滤、别名显示、增加字段、提取子字段等。   1 聚合框架组件  聚合框架包含两大组件:管道和表达式。  1.1管道  管道与unix管道类似,实质就是把扫描的数据输入聚合进程,进行一些过滤、分组、求和等操作,这些操作是通过管道操作符完成的。  例如,实现类似SQL:select b as ok from test111,  聚合语句如下:  db.test111.aggregate([{$project:{_id:0,ok:"$b"}}]);  {          "result" : [                  {                          "ok" : 2                  },                ……………………省略………………………………                  {                          "ok" : 10000                  }          ],          "ok" : 1  }  $project管道操作符就是用来控制字段输出的,本例$project不让_id字段显示,只显示字段b,并且用别名”ok”显示。与unix类似,多个管道操作符是可以一起使用的。例如,上面的结果,只要...
阿豪boy 发布于 6天前 阅读 5

MongoDB 数组查询

MongoDB在文档上支持数组,其次数组上可以实现嵌套,以及数组元素也可以文档。因此,对于文档上数组的操作,MongoDB提供很多种不同的方式,包括数组的查询,数组元素的添加删除等等。本文主要描述数组查询,供大家参考。 一、演示环境及数据 > db.version() 3.2.11 > db.users.insertMany( [ { _id: 1, name: "sue", age: 19, type: 1, status: "P", favorites: { artist: "Picasso", food: "pizza" }, finished: [ 17, 3 ], badges: [ "blue", "black" ], points: [ { points: 85, bonus: 20 }, { points: 85, bonus: 10 } ] }, { _id: 2, name: "bob", age: 42, ...
阿豪boy 发布于 6天前 阅读 7

MongoDB group

查看指定appId在某一个时间段内的访问次数 db.getCollection('Collection').group( { key:{ "cardDataId":true}, initial: {count:0}, reduce:function(obj,prev){prev.count++;}, condition:{ "appId":"2de76bfb26af4b9a844e2ac6597b0c50", $and:[{insertDate:{$gte:'2017-05-01 00:00:00'}},{insertDate:{$lte:'2017-05-08 00:00:00'}}] } })   总结group参数选项: 1.key: 这个就是分组的key  2.initial: 每组都分享一个初始化函数,特别注意:是每一组initial函数。  3.reduce: 这个函数的第一个参数是当前的文档对象,第二个参数是上一次function操作的累计对象。有多少个文档, $reduce就会调用多少次。  4.condition: 这个就是过滤条件。  5.finalize: 这是个函数,每一组文档执行完后,多会触发此方法。 group的其它使用方法实例 准备测试数据 db.user.drop(); for(var i=10; i< 100; i++) { db.user.insert({ name:"user" + i, age : Math.floor(Math.random()*10)+ 20, sex : Math.floor(Math.random()*3)%2 ==0 ? 'M' : 'F', chinese : Math.floor(Math.random()*50)+50, math : Math.floor(Math.rand...
阿豪boy 发布于 6天前 阅读 6

MongoDB 小结

小结 https://www.cnblogs.com/cswuyg/p/4595799.html 常见问题 http://www.cnblogs.com/cswuyg/p/4355948.html 1、shell登陆和显示 假设在本机上有一个端口为17380的MongoDB服务,假设已经把mongo bin文件加入到系统PATH下。 登陆:mongo --port 17380        显示DB:show dbs 进入某DB:use test_cswuyg 显示集合:show tables 2、简单查找 查找文档:db.test_mac_id.find({'a':  'b'}) 删除文档:db.test_mac_id.remove({'a': 'b'}) 查找找到某一天的数据: db.a.find({'D' :  ISODate('2014-04-21T00:00:00Z')}) 或者 db.a.find({'D' :  ISODate('2014-04-21')}) 删除某一天的数据: db.region_mac_id_result.remove({"D" :  ISODate('2014-04-17')}) 小于2014.6.5的数据: db.xxx.find({E: {$lt :ISODate('2014-06-05')}}) 大于等于2014.6.1的数据: db.xxx.find({E: {$gte: ISODate("2014-05-29")}}).count() 两个条件: db.xxx.find({E:{$gte: ISODate("2014-05-29"), $lte: ISODate("2014-06-04")}}).count() json中的嵌套对象查询,采用“点”的方式: mongos> db.wyg.find({"a.b": {$exists: true}}) { "_id" : "c", "a" : { "b" : 10 } } 某个字段...
阿豪boy 发布于 6天前 阅读 7

MongoDB 简单修改操作

修改器$inc 修改器格式{$inc:{filed:value}},该修改器可以用来修改value为数字类型的值,为指定的键对应的数值进行加减 修改年龄字段,使其增加4,这个增加值可以是负数    修改器$unset 修改器格式{$unset:{filed:1}},该修改器可将指定的键删除,field后面对应的可以填0,也可以填1或其他数值,但效果都是将该键从这条数据中删除 删除age字段 修改器$pushhe$pushAll $push是向数据中添加新的数据,但是{$push:{filed:value}}中的field应为数组类型的,如果field不是数组类型的,就会出错,如果filed不存在,则创建该数组类型并插入数据,而$pushAll是向数据中添加数组数据 添加数据22 结果,push会将对象直接放入数组中 使用each修饰符 可以将对象逐个放入数组 不使用each时,将整个数组作为整体     修改器$addToSet,与push相似,但是相同的数据元素不会被加入数组 {$addToSet:{filed:value}}向field目标数组中添加数据,如果目标驻足中已存在value,则什么都不操作,如不存在则添加进去     修改器$pop 修改器格式{$pop:{filed:value}},field为数组类型,value为1或者-1,当value为1时,删除指定数组的最后一个值,value为-1 删除指定数组第一个值   修改器$pu...
阿豪boy 发布于 6天前 阅读 6

MongoDB 查询2

数组条件查询,找到2012年和2017年的电影   只要country数组中有中国或日本的一个就表示匹配成功,返回整个文档   数组元素的增加,使用update和push,向数组中加入新元素,可以加入重复值 db.stu.update( {'name':'aaa'}, {$push:{ 'score':5 }} )   使用update和addToSet 向数组中加入元素,如果该元素存在,则不会加入进去 db.stu.update( {name:'aaa'}, {$addToSet:{ score:4 }} )     查询电影标签数组中,元素属性含有name值为动画的电影   使用$push,将各个分段的电影名称显示出来   查找含有动画标签的电影数目   查询两个属性数组中含有动画的电影数目,使用or   多重分组查询,查询每年的不同评分电影数目,使用mapReduce 使用聚合函数aggregate,速度比mapReduce快很多,但缺少定制化,比如无法处理字段缺失问题   使用mapRedduce 计算各个分段的电影数目,默认汇总字段使用value   使用aggregate达到同样的效果,但效率更高,速度更快   计算每个用户2016-06-01这天的消费金额,先查找在该日期有消费的记录,然后用用户id作为分组的key,花费作为values,输入到reduce中进行汇总 db.consume.map...
阿豪boy 发布于 7天前 阅读 7 评论 2

mysql中查看数据表占的存储空间

mysql table 占用空间
janl 发布于 7天前 阅读 6

mongodb安装

在centos中安装mongodb 官网文档: [Install MongoDB Community Edition on Red Hat Enterprise or CentOS Linux](https://docs.mongodb.com/master/tutorial/install-mongodb-on-red-hat/) [centos7安装MongoDB3.4](https://www.cnblogs.com/web424/p/6928992.html) 有配置参数的详细介绍 [在 CentOS7 上安装 MongoDB](http://www.linuxidc.com/Linux/2016-06/132675.htm) 可以参考这篇文章的配置 [CentOS 7 yum方式快速安装MongoDB](http://blog.51cto.com/55757353/1907058) [centos7 下安装MongoDB](https://www.cnblogs.com/weiweictgu/p/5517717.html)
miaojiangmin 发布于 7天前 阅读 9

删除表空间及数据文件方法

--删除空的表空间,但是不包含物理文件 drop tablespace tablespace_name; --删除非空表空间,但是不包含物理文件 drop tablespace tablespace_name including contents; --删除空表空间,包含物理文件 drop tablespace tablespace_name including datafiles; --删除非空表空间,包含物理文件 drop tablespace tablespace_name including contents and datafiles; --如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;  
JackFace 发布于 1周前 阅读 6

十个实用MySQL函数

十个实用MySQL函数,你要不要进来领走...
andyqian 发布于 2个月前 阅读 2852 评论 6 点赞 6

谈谈开源(一)

作者 申砾 源码面前,了无秘密 ---- 侯捷 ### 前言 很多人的『开源』是一个比较时髦且有情怀的词汇,不少公司也把开源当做 KPI 或者是技术宣传的手段。但是在我们看来,大多数人开源做的并不好,大多数开源项目也没有被很好的维护。比如前一段时间微博上流传关于 Tengine 的讨论,一个优秀的开源项目不止是公布源代码就 OK 了,还需要后续大量的精力去维护,包括制定 RoadMap、开发新功能、和社区交流、推动项目在社区中的使用、对使用者提供一定程度的支持,等等。 目前我们在国内没看到什么特别好的文章讲如何运营一个开源项目,或者是如何做一个顶级的开源项目。TiDB 这个项目从创建到现在已经有两年多,从开发之初我们就坚定地走开源路线,陆续开源了 TiDB、TiKV、PD 这三个核心组件,获得了广泛的关注,项目在 GitHub 的 Trending 上面也多次登上首页。在这两年中,我们在这方面积累了一些经验和教训,这里和大家交流一下我们做开源过程中的一些感受,以及参与开源项目(至少是指 TiDB 相关项目)的正确姿势。 ### 什么是开源 Open-source software (OSS) is computer software with its source code made available with a license in which the copyright ...
TiDB 发布于 5个月前 阅读 1438 评论 7 点赞 2

浅析开源数据库MySQL架构

数据库是所有应用系统的核心,故保证数据库稳定、高效、安全地运行是所有企业日常工作的重中之重。数据库系统一旦出现问题无法提供服务,有可能导致整个系统都无法继续工作。所以,一个成功的数据库架构在高可用设计方面也是需要充分考虑的。下面就为大家介绍一下如何构建一个高可用的MySQL数据库系统。 做过DBA或者是运维的同学都应该知道,任何设备或服务,存在单点就会带来巨大风险,因为这台物理机一旦宕机或服务模块crash,若在短时间内无法找到替换的设备,势必会影响整个应用系统。因而如何保证不出现单点就是我们的重要工作,使用MySQL高可用方案可以很好地解决这个问题,一般有以下几种: 一、利用MySQL自身的Replication来实现高可用 MySQL自带的Replication就是我们常说的主从复制(AB复制),通过对主服务器做一个从机,在主服务器宕机的情况下快速地将业务切换到从机上,保证应用的正常使用。利用AB复制做高可用方案也分为几种不同的架构: 1、常规的MASTER---SLAVE解决方案 普通的MASTER---SLAVE是目前国内外大多数中小型公司最常用的一种架构方案,主要的好处就是简单、使用设备较少(成本较低)、维护方便。这种架构能解决单点的问题,而且还能在很大程度上...
illy安智 发布于 5个月前 阅读 2364 评论 5 点赞 1

MySQL 死锁与日志二三事

最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现。甚至有些异常还比较诡异,最后 root cause 分析颇费周折。那实际业务当中咱们如何能快速的定位线上 MySQL 问题,修复异常呢?下文我会根据两个实际 case,分享下相关的经验与方法。 1、Case1:部分数据更新失败 某天渠道同学反馈某报表极个别渠道数据为 0,大部分渠道数据正常。这个数据是由一个统计程序每天凌晨例行更新的,按理来说,要么全部正常,要么全部失败,那会是什么原因导致极个别数据异常呢? 首先我们能想到的自然是根据统计任务日志来看了,但是看了统计程序打印的日志没有发现诸如 SQL update 失败的异常描述,那当时的数据库究竟发生了什么呢?在查看 MySQL-server 日志之前,习惯性的看了下数据库状态: SHOW ENGINE INNODB STATUS\G 恰好看到了凌晨这个 update 发生了死锁: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2017-07-17 04:09:01 0x7f6de03c8700 *** (1) TRANSACTION: TRANSACTION 215208479, ACTIVE 0 sec fetching rows mysql tables in use 3, locked 3 LOCK WAIT 5 lock stru...
xrzs 发布于 7个月前 阅读 8250 评论 9 点赞 19 打赏 1

数据库中间件 MyCAT 源码分析 —— SQL ON MongoDB

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. 查询操作](#) - [4. 插入操作](#) - [5. 彩蛋](#) ------- # 1. 概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 1. 总体流程,让你有个整体的认识 2. 查询操作 3. 插入操作 4. 彩蛋,😈彩蛋,🙂彩蛋 建议你看过这两篇文章(_非必须_): 1. [《MyCAT 源码分析 —— 【单库单表】插入》](http://www.yunai.me/MyCAT/single-db-single-table-insert/?self) 2. [《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?self) # 2....
芋道源码 发布于 7个月前 阅读 1888 评论 18 点赞 2

数据库中间件 MyCAT源码分析 —— 跨库两表Join

![wechat_mp](http://www.yunai.me/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- - [1. 概述](#) - [2. 主流程](#) - [3. ShareJoin](#) - [3.1 JoinParser](#) - [3.2 ShareJoin.processSQL(...)](#) - [3.3 BatchSQLJob](#) - [3.4 ShareDBJoinHandler](#) - [3.5 ShareRowOutPutDataHandler](#) - [4. 彩蛋](#) ------- # 1. 概述 MyCAT 支持跨库表 Join,目前版本仅支持跨库**两**表 Join。虽然如此,已经能够满足我们大部分的业务场景。况且,Join 过多的表可能带来的性能问题也是很麻烦的。 本文主要分享: 1. 整体流程、调用顺序图 2. 核心代码的分析 前置阅读:[《MyCAT 源码分析 —— 【单库单表】查询》](http://www.yunai.me/MyCAT/single-db-single-table-select/?yunai)。 OK,Let's Go。 # 2. 主流程 当执行...
芋道源码 发布于 7个月前 阅读 1525 评论 1 点赞 3

如何理解并正确使用MySql索引

1、概述 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧。 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 2、索引的优点 1、大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2、帮助服务器避免排序和临时表 3、可以将随机I/O变为顺序I/O 3、索引的创建 3.1、主键索引 ALTER TABLE 'table_name' ADD PRIMARY KEY 'index_name' ('column'); 3.2、唯一索引 ALTER TABLE 'table_name' ADD UNIQUE 'index_name' ('column'); 3.3、普通索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column'); 3.4、全文索引 ALTER TABLE 'table_name' ADD FULLTEXT 'index_name' ('column'); 3.5、组合索引 ALTER TABLE 'table_name' ADD INDEX 'index_name' ('column1', 'column2', ...); 4、B+Tree的索引规则 创建一个测试的用户表 DROP TABLE IF EXISTS user_test; CREATE TABLE user_test( id int AUTO_INCREMENT PRIMARY KEY, user_name varchar(30) NOT NULL, sex bit(1) NOT NULL DEFAULT b'1', city varc...
FEINIK 发布于 7个月前 阅读 6785 评论 24 点赞 30 打赏 2

MySQL基于gtid特性与xtrabackup的数据恢复

通过备份文件新建从库,将binlog跑到指定的gtid位置,可以将数据恢复到指定的时间点。
o翡翠谷o 发布于 8个月前 阅读 1912 评论 2 点赞 2

对MySQL交换分区的实践

前言 在介绍交换分区之前,我们先了解一下 mysql 分区。 数据库的分区有两种:水平分区和垂直分区。而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区。水平分区即:以行为单位对表进行分区。比如:按照时间分区,每一年一个分区等。 在MySQL中,分区是可以交换的,可以将一个分区表中的一个分区和一个普通表中的数据互换。   交换分区的实现 1、交换分区的语法 alter table pt exchange partition p with table nt; 解释: 将 分区表pt 的 分区p 和 一个普通表nt 中的数据 进行互换。 交换的前提条件: 普通表nt 不为临时表,且不是分区表。 表结构和分区表pt的结构一致。 普通表nt 没有外键引用。 普用表nt 若为非空。在MySQL5.6以及之前的版本,必须在分区的范围内;在MySQL5.7之后则可以不再其分区范围内,也依然会成功存入该分区中。 2、实验 交换分区 (1) 创建一个分区表,并插入数据 # 创建一个 分区表e CREATE TABLE e ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30) ) PARTITION BY RANGE (id) ( PARTITION p0 VALUES LESS THAN (50), PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LES...
star_glm 发布于 8个月前 阅读 2021 评论 4 点赞 5

三篇文章了解 TiDB 技术内幕 —— 谈调度

任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外。 前两篇文章介绍了 TiKV、TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都是大家看得见的东西。在这两个组件的后面,还有一个叫做 PD(Placement Driver)的组件,虽然不直接和业务接触,但是这个组件是整个集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度。 本篇文章介绍一下这个神秘的模块。这部分比较复杂,很多东西大家平时不会想到,也很少在其他文章中见到类似的东西的描述。我们还是按照前两篇的思路,先讲我们需要什么样的功能,再讲我们如何实现,大家带着需求去看实现,会更容易的理解我们做这些设计时背后的考量。 # 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 KV 存储引擎,数据以 Region 为单位进行复制和管理,每个 Region 会有多个 Replica(副本),这些 Replica 会分布在不同的 TiKV 节点上,其中 Leader 负责读/写,Follower 负责同步 Leader 发来的 raft log。了解了这些信息后,请思考下面这些问题: * 如何保证同一个 Region 的多个 Replica 分布在不同的节点上?更进一...
TiDB 发布于 8个月前 阅读 1123 评论 3 点赞 1

Mongodb高可用集群搭建

最近公司项目要求Mongodb集群且高可用,在查询了一系列文章,再结合项目实际情况,所以采用了这一套高可用集群方案
Crazy_Coder 发布于 9个月前 阅读 1999 评论 5 点赞 7

实验:MySQL使用JDBC执行批处理性能测试

实验:MySQL使用JDBC执行批处理性能测试
IamOkay 发布于 11个月前 阅读 1982 评论 10 点赞 6

记一次mysql性能优化过程

所谓mysql的优化,三分是配置的优化,七分是sql语句的优化,通过一些案例分析,希望给大家在工作中带来一些思路
成熟的毛毛虫 发布于 12个月前 阅读 6436 评论 57 点赞 36 打赏 3

NoSQL介绍

对nosql出现背景、nosql类型做介绍,并解答nosql相关问题
你我他有个梦 发布于 12个月前 阅读 1588 评论 1 点赞 4

Linux服务器安装Oracle服务端总结

通过ssh远程连接linux服务器,上传Oracle11g的安装包,在无图形化界面的情况,安装Oracle服务器端。本例中linux服务器系统为CentOS6.5.
梨加橙 发布于 1年前 阅读 3503 评论 27 点赞 4

【技术解密】SequoiaDB复制组选举原理说明

1.SequoiaDB介绍 SequoiaDB是国内一款自主研发的分布式文档型数据库。它与过去开发者所熟悉的关系型数据库不同,它的数据结构是BSON类型,一种与JSON结构非常相近的数据类型。 SequoiaDB与关系型数据库除了在数据类型上有比较明显的差异外,还原生支持分布式存储。用户在搭建一个能够应对海量数据以及包含高并发操作的系统时,不再需要像过去一样,在业务层面做复杂的分表分库工作,直接在定义数据表时,明确告诉数据库此表需要根据哪个字段以及何种规则进行分布式存储,数据分布式存储对于用户来说变得透明。用户可以更加专注以业务逻辑开发,而不是关注如何分表分库。 2.SequoiaDB总体架构介绍   图1:SequoiaDB 总体架构示意图 SequoiaDB整个集群中,主要角色构成是三个,协调节点,编目节点和数据节点。 1.1 协调节点 协调节点(英文称呼为Coord),是SequoiaDB的任务分发节点(一般用户成为Master节点),本身不存储任何数据,主要负责接收应用程序的访问请求。所以一般用户在与SequoiaDB打交道时,访问的都是协调节点,对于其他角色的节点,一般情况下是不建议用户去访问的。 在SequoiaDB老版本中,协调节点在数据库集群中是类似孤岛式部署的。怎么说呢,主要因为...
巨杉数据库 发布于 1年前 阅读 797 点赞 1

redis 主从配置

redis主从复制过程:  当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。master同步数据时是非阻塞式的,可以接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化 拥有主从服务器的好处(从服务器是只读的,可以一主多从) 1.    主服务器进行读写时,会转移到从读,减轻服务器压力 2.    热备份 主从都可以设置密码,也可以密码不一致   进入/usr/data/redis/slave 创建 master  slave1  slave2 1.复制redis.conf到3个目录,修改端口 1000,2000,3000 ...
lyg945 发布于 1年前 阅读 5301 评论 20 点赞 12

Redis基数统计——HyperLogLog小内存大用处

摘自本人 http://irfen.me/redis-hyperloglog-intro/ 我们一直都知道,redis几大常用数据结构,字符串、散列、列表、集合、有序集合。其实后来Redis做了很多补充,其中之一就是HyperLogLog,另外的还有GEO(地理位置),是3.2版本加的。 这里我们就来简单介绍下HyperLogLog结构。 先说用处:这个结构可以非常省内存的去统计各种计数,比如注册ip数、每日访问IP数、页面实时UV(PV肯定字符串就搞定了)、在线用户数等。 这里看到所有的用处都是xxx数,所以这个数据结构的特点就是,可以比较准确的估算出你要统计的数量,但是却无法知道统计的详细内容。比如统计每日访问IP数,可以获取当时访问过的IP总数量,但是没法知道这些IP都是什么。 有得必有失,当然你要统计上面提到的那些内容,可以用集合来处理,这样可以知道数量,也能获得所有的详细列表。但是一个大型的网站,每天IP比如有100万个呢,我们粗算一个IP消耗15字节,那么100万个IP就是15M,如果1千万,就是150M。 再来看看我们的HyperLogLog,在Redis中每个键占用的内容都是12K,理论存储近似接近2^64个值,不管存储的内容是什么。12K,知道这个数据结构的作用了吧。这也是为什么他不能知道里面的详细内容了。这是...
赵伊凡 发布于 1年前 阅读 2200 评论 1 点赞 3

PingCAP唐刘:基于Raft构建分布式系统TiKV

2016年9月10日,第52期【OSC源创会】在珠海圆满落幕,350余名OSCer齐聚报业大厦,聆听了一场诚意满满的技术分享盛会。本期源创会由5位讲师分别针对5个不同的主题进行分享,为给未能到现场以及参与活动后仍意犹未尽的OSCer更好的了解和学习,开源中国将每位讲师的演讲内容进行了整理,并将逐一发布。干货多多,不容错过! PingCAP 是国内的一家完全走开源路线的 startup,专注于构建下一代分布式数据库及生态系统,代表作品 TiDB。本期源创会,来自 PingCAP 的首席架构师唐刘,对分布式一致性算法 Raft,以及他们是如何使用 Raft 进行分布式系统 TiKV 的开发进行了介绍与分享。 嘉宾介绍: 唐刘,PingCAP 首席架构师,现致力于下一代分布式数据库 TiDB、分布式存储 TiKV 的开发。开源爱好者,Go、Rust 等语言爱好者和实践者。 分享亮点: 1、 Raft 算法将 Server 划分为3种角色,Leader、Follower 和 Follower,每个 Term 至多存在1个 Leader,每个 Server 本地维护 currentTerm。 2、TiKV 和 TiDB可以看作对应着 Google Spanner 和 F1,用 Open Source 方式重建。 3、TiDB 是使用 Go 编写的,TiKV 是用 Rust 编写的,TiDB 在 TiKV 上层。 4、 TiKV 基于 Raft ,每一个 ...
王练 发布于 1年前 阅读 1430 评论 2 点赞 2

MySQL应用优化

本文从MySQL语句优化、引擎选择、数据库设计三个方面介绍如何进行MySQL应用优化
lonelydawn 发布于 2年前 阅读 4115 评论 20 点赞 6
顶部