Redis 并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作.…
1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞.读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得 并发性相比一般的排他锁有了很大提升. 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式.假设在程序中定义一个共享的数据结构用作缓存,它大部分时间提供读服务(例如:查…
一.读写锁 1.初识读写锁 a)Java中的锁——Lock和synchronized中介绍的ReentrantLock和synchronized基本上都是排它锁,意味着这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,在写线程访问的时候其他的读线程和写线程都会被阻塞.读写锁维护一对锁(读锁和写锁),通过锁的分离,使得并发性提高. b)关于读写锁的基本使用:在不使用读写锁的时候,一般情况下我们需要使用synchronized搭配等待通知机制完成并发控制(写操作开始的…
以下内容转自http://ifeve.com/read-write-locks/: 相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些.假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源.但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(译者注:也就是说:读-读能共存,读-写不能共存,写-写不能共存).这就需要一个读/…
提出问题 1. spark shuffle的预聚合操作是如何做的,其中底层的数据结构是什么?在数据写入到内存中有预聚合,在读溢出文件合并到最终的文件时是否也有预聚合操作? 2. shuffle数据的排序是如何做的? 分区内的数据是否是有序的?若有序,spark 内部是按照什么排序算法来排序每一个分区上的key的? 3. shuffle的溢出操作和TaskMemoryManager的关系? 4. 在数据溢出阶段,内存中数据的排序是使用算法进行排序的? 5. 在溢出文件数据合并阶段,内存中的数据的排…
MongoDB使用BSON文件存储在collection中,本文主要介绍MongoDB中的写操作和优化策略. 主要有三种写操作:        Create        Update        Delete Create:可以分为两种基本操作——insert和updates with the upsert option Insert() BSON文件最大为16M:_id通常作为主key为了测试写操作是否成功,可以调用getLastError函数{ getLastError: 1 } db.…
问题: TokuMX删除文档时,符合删除条件的文档很多,删除操作持续时间长,期间,服务写操作OPS大幅下降,同时日志log里发现大量“ Lock not granted. Try restarting the transaction. ”. 在删除操作执行完成后,积累的update一时间涌进来.同样的删除行为,在MongoDB上运行正常. 原因: MongoDB是数据库锁,即使remove持续时间长,周期性释放锁可以保证其他读写操作执行.它支持的并发访问,服务端实际上是串行处理. TokuMX是…
本质:读操作,用mysql_num_rows函数,写操作用mysql_affected_rows函数 mysql_num_rows() 返回结果集中行的数目.此命令仅对 SELECT 语句有效.要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows(). CI中的方法: 读操作,获取行数: $query->num_rows() 该函数将会返回当前请求的行数.在本例子中, $query 表示当前 SQL 所产生的请求结果对象:…
转载于:http://blog.sina.com.cn/s/blog_76e7bdba01016p2p.html CI中第一次连接数据库,在控制器或模型的构造函数里输入以下语句 $this->load->database(); 就不需要重复连接, 在那个控制器或模型就可以做任意多次的查询. 查询操作(等同select) 方法一: $query = $this->db->get('sites'); //sites为表名 这是一个“select *”查询,目标是site表.换句话说,它…
MachineKey介绍 MachineKey其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,一般情况下IIS自动默认给网站或者每一个应用生成唯一的MachineKey,当然您也可以手动生成的MachineKey,一般有由 FormsAuthentication 操作类来进行操作. 应用集群,SSO单点登录 SSO:英文全称Single Sign On,单点登录,SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登…
在system/application/config 文件夹和里面的config文件里已经配置了参数 $active_group = "default";$db['default']['hostname'] = "";  hostname: 你的数据库的位置, 举例来说, 'localhost' 或 IP 地址 $db['default']['username'] = "";  username和password: 使用者名称和密码必须有充分的权…
CI中获取HTTP头信息的方法: $this->input->request_headers() 在不支持apache_request_headers()的非Apache环境非常有用.返回请求头(header)数组. $headers = $this->input->request_headers(); ------------------------------------------------------------------------------------------…
一.//JQ获取URL中是否含有某个字符的话,对页面进行某种操作 例:如果URL中含有xia的字符,就在页面引入一个cssvar str=window.location.href; //获取地址栏URL if(str.indexOf("xia")>-1){ //如果URL中含有xia就对页面进行某种操作 $("head").append("<link>"); var toolbarCss = $("head"…
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后,在每个测试方法中,就不必再编写这些代码,最终,在执行测试方法之前,会自动调用添加了@Before注解的方法,在执行测试方法之后,会自动调用添加了@After注解的方法: private AbstractApplicationContext ac; private UserMapper userMap…
一.开启query_builder 在application\config\database.php中添加如下代码(默认已开启): $query_builder = TRUE; 二.查询数据 //get $res = $this -> db -> get('test'); $list = $res -> result(); var_dump($list); /* array (size=7) 0 => object(stdClass)[18] public 'id' => s…
要使用CI中的数据库操作,首先我们应该在CI的 application/config/databass.php 文件中配置数据库信息,通常就是配置主机名,用户名,密码,数据库名,表前缀(dbprefix): CI提供了一个database的类,但是并不默认装载,需要手动加载:$this -> load ->database() ;也可以在application/config/autoload.php中的 $autoload['libraries'] = array( 'database' )…
1. MongoDB 使用的锁 MongoDB 使用的是“readers-writer”锁, 可以支持并发但有很大的局限性当一个读锁存在,许多读操作可以使用这把锁,然而, 当一个写锁的存在,一个单一的写操作会”exclusively“持有该锁,同一时间其它写操作不能使用共享这个锁:举个例子,假设一个集合里有10个文档,多个update操作不能并发在这个集合上,即使是更新不同的文档. 2. 锁的粒度 在 2.2 版本以前,一个mongodb实例一个写锁,多个读锁.也就是说mongod 只有全局锁(…
背景:测试接口的时候,经常都是后端get\post请求直接返回json结果集,很想知道实现方式,虽然心中也大概了解如何实现,但还不如自己来一遍踏实! 先来看一下结果吧: 以下对一个web的get接口进行解析: 一.分层架构图:因都是老生常谈,具体不详解,我的层级分的很清楚,数据读mysql库,理论上有基础的都看得懂 二.代码展示 (1)工具类-数据源连接 package util; import java.io.IOException; import java.io.InputStream; i…
工作原理: NameNode和DateNode,NameNode相当于一个管理者,它管理集群内的DataNode,当客户发送请求过来后,NameNode会 根据情况指定存储到哪些DataNode上,而其本身自己并不存储真实的数据.那NameNode怎么知道集群内DataNode的信息呢? DataNode发送心跳信息给NameNode. 写操作: 以下是直接从文档中摘抄下来的(利于理解): 有一个文件FileA,100M大小.Client将FileA写入到HDFS上. HDFS按默认配置. HD…
一.概述 读和写是I/O的基本过程.从一个通道中读取只需创建一个缓冲区,然后让通道将数据读到这个缓冲区.写入的过程是创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作. 二.从文件中读取 1.原始I/O读文件 如果使用原来的I/O,那么只需要创建一个FileInputStream并从它那里读取,示例代码如下: public class BioTest { public static void main(String[] args) throws IOException { File…
1.怎样加快master数据库的写操作?分表原则!将表水平划分!减少表的锁定时间!!! 或者或者添加写数据库的集群!!!或者添加写数据库的集群!!! 2.既然分表了,就一定要注意分表的规则!要在代码层,代码层知道将数据insert/select到哪张表上. 3.要在代码层知道将数据操作到哪张表上!分表规则, 所以分表规则要用代码设计出来,与数据库中的分表规则对应!!!一样!!!一样的分表规则!! 4.那么按什么规则分表呢?有不同的策略,常见的有按照01234556789,账号尾数0对应0表,1对…
很多公司都在用MongoDb ,一直没有时间研究,最近好好的整了一下,做下笔记,直接上操作步骤,关于Mongodb的理论知识可以搜索其他资料,也可以联系我索取 mongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模式,主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性.而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了上面 第一个问题“主节点挂掉了,整个集群内会自动切换”.难怪mongoDB官方推荐使用这种模式.我们来看看mongoDB副本集的…
开始是通过java代码调用vsphere提供的原始接口,从而控制vcenter的操作.当第一个版本做完之后发现代码执行的速度特别慢,后来在网上看到有人用vijava(对vsphere原始接口封装)编程,自己就试着换了几个接口发现代码执行速度很快.所以第二版都换了vijava操作.下面就和大家一起学习下如何通过vijava控制vcenter. 首先去github上下载vijava项目,然后将其导入自己的项目. 利用vijava完成vcenter连接类的创建:所有代码都可以之间运行. package…
继上一篇设置mongodb副本集之后,开始使用nodejs访问mongodb副本集: 1:创建项目     express 项目名称 2:npm install mongoose    安装mongoose包 3:mongoose连接数据库配置 var mongoose = require('mongoose'); mongoose.Promise = Promise; // Promise.promisifyAll(mongoose); var uri = 'mongodb://172.16.…
本文详述了Hbase集群的部署. 集群部署 1.将安装包上传到集群并解压 scp hbase-0.99.2-bin.tar.gz mini1:/root/apps/ tar -zxvf hbase-0.99.2-bin.tar.gz -C install/ mv hbase-0.99.2 hbase 2.配置环境变量 vim /etc/profile export HBASE_HOME=/root/apps/install/hbase export PATH=$PATH:$HBASE_HOME/…
当使用CI框架进行开发时,我们的一些数据传递的URL不应该写死,可以使用如下方法:比如说我们需要表单提交一个数据: 1.在controller控制器中我们需要先创建一个加载helper和视图的方法: eg:pubulic fuction add(){ $this -> load -> helper( ‘ url ’ ): //首先加载 helper( 'url' ) 到超级对象中,site_url函数在helper的辅助函数中: $this -> load -> view( ' u…
CI中的超级对象就是当前控制器对象,它提供了很多属性,可以通过var_dump($this)打印所有的超级对象: load可以理解为一个加载器,加载了很多功能,可以理解为当你使用 $this -> load 之后CI自动帮你new了一个loader类的对象实例,然后你就可以调用load里面封装的各种方法(函数),具体的函数可以在CI文件目录下的system/core/Loader.php文件中查看: $this -> load -> view()  //装载视图: vars() //分配…
原 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群 2018年12月06日 14:26:45 温故而知新666 阅读数 897   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/nimasike/article/details/84852391 Redis哨兵模式,由Sentinel节点和Redis节点组成,哨兵节点负责监控Redis的健康状况,负责协调Redis主从复…
redis 采用 redis-3.2.4 版本. 安装过程 1. 下载并解压 cd /usr/local wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar -zxvf redis-3.2.4.tar.gz 2. 编译安装 cd redis-3.2.4 make && make install 3. 将 redis-trib.rb 复制到 /usr/local/bin 目录下 cd src cp redis-trib.…
Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/. Redis 是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集…