Bigtable论文,称作google的三驾马车(MapReduce,DFS,Bigtable)之一。Hadoop系统就是基于MapReduce和DFS论文的开源实现,而hbase是bigtable的开源实现。bigtable具有如下特点:
分布式存储系统
存储的是结构化数据
集群,海量数据
支持批处理,也支持实时数据读取
低延迟
1. Introduction
bigtable被设计成可以部署在上千台机器上,容纳P级别数据的系统。即可用于面向吞吐率的批处理场景,也可以用于面向终端用户的低延迟场景。 在很多方面,bigtable类似于数据库,或者说,采用了类似于数据库的实现策略。如,类似于并行数据库和内存数据库的高性能。但是,bigtable并不是一个严格意义上的数据库,只支持数据库的部分模型,其提供了一些对数据分布和格式的动态控制。数据通过row和column的名称来索引,可以是任何字符串,bigtable对这些字符串不解析,只是存储。
2. Data Model
A Bigtable is a sparse, distributed, persistent multidimensional sorted map. The map is indexed by a row key, column key, and a timestamp; each value in the map is an uninterpreted array of bytes. Bigtable是一个稀疏的,分布式的,持久化的多维有序映射表。键是row key,column key,时间戳组成,值是一个不需解释的字节数组。
例如,用于存储爬虫爬取下来的网页,row key就是网址,有两个列簇,contents
(用于存储网页内容)和anchor
(用于存储网页内部的链接锚url)。如图1所示。一个rowkey可以在3个不同的时间戳(t3,t5,t6),有3个不同的内容,即有3个值,默认显示最新的。列簇anchor有2个字段。
Row(主键)
row key可以是任意的字符串,长度上限是64KB,但一般10-100个字节足矣。对一个rowkey的读和写都是原子操作。 Bigtable通过字典序对rowkey进行存储。当bigtable的数据量越来越多时,就要对数据进行划分(partition),聚在一起的数据就叫做tablet
,tablet是分布和负载均衡的最小单位。
Column Families(列簇)
列簇下面可以有多个字段,是访问控制的最小单位。列簇里面的数据都是相同的数据类型。列簇需要先创建,然后才能向其添加字段,存储数据。一个bigtable最好列簇不要太多,一般保持在100个左右,但是一个列簇里面的字段数量是不限制。 column key的语法格式是column family:qualifier
。列簇的名字是可见字符,但是qulifier可以是任意字符串。 访问控制和内存硬盘存取设置,都是针对列簇级别的。
Timestamps(时间戳)
值可以有多个时间戳,也就是说有多个版本,按时间戳的倒序排列,默认显示最新的时间戳。 存储的时候,可以自己指定时间戳的值,也可以由系统指定。如果自己指定,请注意时间戳的唯一性,避免冲突。 时间戳还可以用于值的清理,有两种设置,一种是最多保持多少个版本,历史版本的就会被清理回收掉;另一种是,保留多久,过期就会被清理。
3. API
bigtable可以作为mapreduce的输入和输出。
4. Building Blocks
bigtable构建于一些谷歌基础框架之上。采用GFS来存储日志和数据文件。底层采用谷歌内部一种叫做SSTable的文件格式。
SSTable本身是一个持久化,有序的,不可变的映射map,其key和value可以是任意字符串。可以通过单个key查询value,也可以通过指定key的范围查询一批value。SSTable内部包含一系列Block(大小一把为64KB,可配置)。Block的索引,存储于SSTable的底部,可用于定位Block;当SSTable被打开时,Block的索引还会被加载到内存中。通过索引,可以找到Block,然后通过一次磁盘读取,将Block整个加载到内存中,即可完成查找。如果SSTable可以被读取到内存,那么就可以省略掉这一次磁盘读取,直接在内存中进行操作。
还采用Chubby(开源实现,zookeeper)来实现高可用和分布式锁服务。包括,确保只有一台master节点存活;发现tablet server以及tablet server的下线;存储bigtable的schema信息(列簇信息);存储控制列表等。
5. Implementation
The Bigtable implementation has three major components: a library that is linked into every client, one master server, and many tablet servers. tablet server可以被动态的添加or删除。
master节点的工作职责如下:
分配tablet到tablet server
处理tablet server节点的添加or删除
tablet server的负载均衡
GFS文件的垃圾回收
table的元数据管理,如table变更,列簇变更等
tablet server节点的工作职责如下:
管理tablet,一般一个节点可以有 1000个tablet
负责本节点的tablet的读or写
负责tablet的split操作
和每个单主节点的分布式存储一样,client不会将数据移动到master节点:client直接与tablet server节点进行读写操作交互。client也无需和master进行交互来获取tablet位置信息,因此master节点的负载很小。 bigtable集群有多个table,每个table有多个tablets组成,每个tablet对应一个rowkey区间的数据。table创建时,只有一个tablet,随着数据的变多,tablet会进行split操作,一般一个tablet有100-200MB大小。
5.1 Tablet Location
tablet索引信息
tablet位置信息是由一种类似于B+树的三层层次结构来存储的,如下图所示。
Tablet localtion hierarchy
Root tablet,包含METADATA中的所有tablets location信息。METADATA tablet包含一些用户tablets location信息。Root tablet不在分裂了,确保三层层次结构不变!
METADATA table存储的是用户tablet名称+结束rowkey
。
客户端会缓存一些tablet location信息。
个人理解,如下
第一层是全局tablet位置信息,每一行对应第二层中每一个tablet的第一行位置信息,索引的rowkey之间跨度最大
第二层可以有多个tablet,每个tablet是存储的是实际tablet的位置信息,按表名和结束rowkey作为键存储
第三层就是真实tablet,每行就是一个真实的row。 三层结构,可以有效的通过前两层,定位到最终要读取的tablet。
5.2 Tablet Assignment
tablet分配
这个部分就是Chubby(zookeeper)来做分布式协调服务的案例。 一个tablet一次只能分配给一个tablet server。master节点维护tablet server的健康信息,负责分配tablet。当一个tablet待分配时,master就会查找当前有哪些tablet server有空间,然后就会发送一个tablet分配请求给tablet server,等待分配。 bigtable采用Chubby来跟踪tablet server的健康信息。当tablet server启动时,先获取一个排它锁,即在Chubby的目录下创建一个命名文件。如果能创建成功,就可以启动了。master节点会监控这个目录,来获取当前有哪些tablet server是存活的。如果一个tablet server失去了这个排它锁,那么就会停止服务。tablet server会再次尝试获取这个排它锁,如果这个文件还存在的话。如果这个文件不存在了,那么这个tablet server就不再服务了,server会自己关闭。如果一个tablet server终止服务了,那么就会释放掉这个排它锁,master节点就会将该server上的tablet重新分配给其他存活的server。 当master节点启动时,它需要获取启动之前已分配的tablet信息。master节点启动时步骤如下:
master节点通过Chubby获取一个排它锁,这样能确保只要一个master节点启动;
master节点扫描Chubby的server目录,获取当前存活的server节点列表;
master节点与tablet server节点通信,获取各个server上已经分配的tablet列表;
master节点扫描METADATA表获取tablets集合信息。 只有当table创建或删除时,已经存在的tablets集合才会变化,如当两个tablet合并成一个大的tablet,或当一个大的tablet分裂成两个小的tablet。master节点能够跟踪到合并信息,但是分裂动作是由tablet server发起的。tablet server提交分裂的新的tablet信息到METADATA表,当split完成后,会通知给master节点。
5.3 Tablet Serving
读写流程
最终数据是存储在GFS上。 最近更新和追加的数据写到一个commit log文件中,并写到一个排序的内存buffer(memtable)中。 最终数据+memtable or commit log中的数据,就是当前完整的数据。
写流程。当写操作到达tablet server,server先检查格式和权限。如果都没问题,则写入commit log,然后写入memtable。也可以批量提交,会提供吞吐率。 读流程。当读操作到达tablet server,server先检查格式和权限。然后基于SSTables和memtable组成合并视图,进行查询。由于SSTable和memtable是按字典序存储的数据结构,因此合并操作很高效容易。
5.4 Compactions
合并
当上一节的更新写到一定程度时,就要生成SSTable,从而减少memtable的内存压力。当memtable到达一定的阈值后,memtable就会被冻结,然后创建一个新的memtable,冻结的memtable就会被转化成SSTable,并写到GFS中。minor compaction有两个目标:
缩减tablet server的内存大小消耗
避免tablet server崩溃后恢复时,需要读取太多未合并的commit log,影响恢复速度,实际上就是早点将未持久化的数据落地,落地为安
每次minor compaction就会生成一个SSTable文件。如果SSTable很小,并且过多,那么一次read操作就可能需要读取多个SSTable并合并,因此需要进行major compaction。 如果说minor compaction是将memtable或commit log生成SSTable,那么major compaction就是将多个SSTable合并成一个SSTable的过程。minor compaction生成的SSTable可能还包含已删除的数据,但在major合并的过程中,会将这些数据清除掉。
6. Refinements
Locality groups
多个列簇可以存储到一个locality group。一个tablet中,可以有多个locality group,每个group对应一个SSTable。如果列簇不需要一起读取,则无需存储到一个locality group,这样读的效率会高些。个人理解,locality group类似于数据块,每次读取时候,会全部读取,这样即使本次不用读取的列簇,也需要读取了。
Compression
压缩针对的是SSTable block,采用两轮压缩。 第一轮,采用Bentley and McIlroy's 压缩,最长公共前缀压缩; 第二轮,快速压缩算法 压缩在bigtable中,首先考虑的是速度,其次才是压缩比。但实际上,公共前缀压缩就有较好的效果,因为SSTable中的数据是有序的,相近rowkey的数据可能会相似,因此有较多的公共前缀;其次,数据多版本之间,内容相似。因此最终压缩比在10比1左右。
Caching for read performance
两个层次的缓存 其一,高层次,缓存到具体的rowkey,下次读取同一个rowkey较快 其二,低层次,缓存到SSTable block信息,读取相同block的rowkey较快
Bloom filters
布隆过滤器
采用布隆过滤器来判断一个rowkey/column对是否在SSTable中。如果结论是不在,那么一定不在,如果结论是在,那么有一定的概率最终不在SSTable,但是这种误判是可以接受的。因为它以较小的代码判断了不在的问题。如果误判了,那么无非就是读一次SSTable。可以有效的减少磁盘访问次数。
Commit-log implementation
bigtable采取的是一个tablet server有一个commit-log文件。采用上述实现,写的效率是高的,但是recovery就复杂了。如果tablet server挂了,需要将tablet重新分配,如果有10个tablet server接到了分配任务,各自取一部分tablet进行恢复。为了恢复tablet,需要先获取原先tablet server写的commit-log,重新执行一次。但如果只有一个commit-log,那么多个tablet写到commit-log,是否都要复制到新的tablet server,实际上这里面只有一些是需要的。 bigtable是按照如下方法解决这个问题的。先按
作为key进行排序,有序了,所有对同一个table的操作就是连续的,读取就方便多了。还可以将log文件按段划分,然后在不同的tablet server对各个段进行排序。
Speeding up tablet recovery
Exploiting immutabilty
SSTable是不可变的,即只能追加,不能更新。因此就不需要进行加锁同步操作了。由于SSTable是不可变的,因此清理已经删除的数据,就转移到对SSTable进行回收时进行。
7. Performance Evaluation
8. Real Applications
9. Lessons
你可能感兴趣的:([论文阅读]Bigtable: A Distributed Storage System for Structured Data)
(二)SAP Group Reporting (GR) 核心子模块功能及数据流向架构解析
数据如何从子公司流转到合并报表的全过程,即数据采集→合并引擎→报表输出,特别是HANA内存计算如何优化传统ETL瓶颈。SAPGroupReporting(GR)核心模块功能及数据流向的架构解析,涵盖核心组件、数据处理流程和关键集成点,适用于S/4HANA1809+版本:一、核心功能模块概览模块功能关键事务码/FioriApp数据采集(DataCollection)整合子公司财务数据(SAP/非SA
深入理解汇编语言子程序设计与系统调用
网安spinage
汇编语言 开发语言 汇编 算法
本文将全面解析汇编语言中子程序设计的核心技术以及系统调用的实现方法,涵盖参数传递的多种方式、堆栈管理、API调用等关键知识点,并提供实际案例演示。一、子程序设计:参数传递的艺术1.寄存器传参:高效简洁.386.modelflat,stdcalloptioncasemap:none.dataxdd5;定义变量ydd6sumdd?.code;函数定义:addxy1addxy1procpushebpmo
md5加密
落地成佛
using(MD5md5=MD5.Create()){byte[]byteHash=md5.ComputeHash(System.Text.Encoding.Default.GetBytes(s));stringstrRes=BitConverter.ToString(byteHash).Replace("-","");returnstrRes.ToUpper();}
代码随想录算法训练营第三十五天
01背包问题二维题目链接01背包问题二维题解importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intM=sc.nextInt();intN=sc.nextInt();int[]space=newint[M];int[]value=new
Android 应用权限管理详解
文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G
DPDK 技术详解:榨干网络性能的“瑞士军刀”
你是否曾感觉,即使拥有顶级的服务器和万兆网卡,你的网络应用也总是“喂不饱”硬件,性能总差那么一口气?传统的网络处理方式,就像在高速公路上设置了太多的收费站和检查点,限制了数据包的“奔跑”速度。今天,我们要深入探讨一个能够打破这些瓶颈,让你的网络应用快到飞起的“黑科技”——DPDK(DataPlaneDevelopmentKit,数据平面开发套件)。这不仅仅是一个工具包,更是一种全新的网络处理哲学。
手把手教你用C语言实现顺序表
hello,大家好,本篇文章旨在为大家讲解如何使用C语言实现顺序表,还有就是小编自己复习一下相关知识,OK,那我们现在开始。在通讯录中,有增删查改等功能,那么顺序表我们也会对以上功能进行实现。一、创建并初始化顺序表1.创建typedefintSLDataType;#defineINIT_CAPACITY4//动态顺序表--按需申请typedefstructSeqList{SLDataType*a;
MySQL复习题
一.填空题1.关系数据库的标准语言是SQL。2.数据库发展的3个阶段中,数据独立性最高的是阶段数据库系统。3.概念模型中的3种基本联系分别是一对一、一对多和多对多。4.MySQL配置文件的文件名是my.ini或my.cnf。5.在MySQL配置文件中,datadir用于指定数据库文件的保存目录。6.添加IFNOTEXISTS可在创建的数据库已存在时防止程序报错。7.MySQL提供的SHOWCREA
Pandas:数据科学的超级瑞士军刀
科技林总
DeepSeek学AI 人工智能
**——从零基础到高效分析的进化指南**###**一、Pandas诞生:数据革命的救世主****2010年前的数据分析噩梦**:```python#传统Python处理表格数据data=[]forrowincsv_file:ifrow[3]>100androw[2]=="China":data.append(float(row[5])#代码冗长易错!```**核心痛点**:-Excel处理百万行崩
《UNIX网络编程卷1:套接字联网API》第8章:基本UDP套接字编程深度解析
《UNIX网络编程卷1:套接字联网API》第8章:基本UDP套接字编程深度解析(8000字图文实战)一、UDP协议核心特性与编程模型1.1UDP协议设计哲学UDP(UserDatagramProtocol)是面向无连接的传输层协议(图1),其核心特征包括:无连接通信:无需三次握手,直接发送数据报尽最大努力交付:不保证可靠性、不维护连接状态报文边界保留:接收方读取的数据与发送方写入完全一致低开销高效
Spark SQL架构及高级用法
Aurora_NeAr
spark sql 架构
SparkSQL架构概述架构核心组件API层(用户接口)输入方式:SQL查询;DataFrame/DatasetAPI。统一性:所有接口最终转换为逻辑计划树(LogicalPlan),进入优化流程。编译器层(Catalyst优化器)核心引擎:基于规则的优化器(Rule-BasedOptimizer,RBO)与成本优化器(Cost-BasedOptimizer,CBO)。处理流程:阶段输入输出关键动
在Windows11上安装Linux操作系统的几种技术方案
yuanpan
linux 运维 服务器
在Windows11上安装Linux主要有以下几种技术方案,每种方案适用于不同的需求场景:1.WindowsSubsystemforLinux(WSL)适用场景:开发、命令行工具、轻量级Linux环境支持发行版:Ubuntu、Debian、KaliLinux、Fedora等优点:轻量级:无需虚拟机,直接在Windows上运行Linux命令行环境。无缝集成:可访问Windows文件系统,支持VSCo
数据库基础概念梳理
22:30Plane-Moon
数据库
1.数据存储类型表(Table):存储结构化数据的标准方式,数据以行和列的形式组织,具有固定的格式。非结构化数据(UnstructuredData):如音频、视频、图片、文本文档等,其格式不固定,不易直接用表存储。2.SQL的核心优势SQL尤其擅长处理和操作存储在表中的结构化数据。2.1数据类型约束(DataTypeConstraints):定义列可存储的数据种类。整数类型:TINYINT(1字节
SQL笔记纯干货
AI入门修炼
oracle 数据库 sql
软件:DataGrip2023.2.3,phpstudy_pro,MySQL8.0.12目录1.DDL语句(数据定义语句)1.1数据库操作语言1.2数据表操作语言2.DML语句(数据操作语言)2.1增删改2.2题2.3备份表3.DQL语句(数据查询语言)3.1查询操作3.2题一3.3题二4.多表详解4.1一对多4.2多对多5.多表查询6.窗口函数7.拓展:upsert8.sql注入攻击演示9.拆表
Java:数据结构-ArrayList和顺序表(2)
blammmp
java 数据结构 开发语言
一ArrayList的使用1.ArrayList的构造方法第一种(指定容量的构造方法)创建一个空的ArrayList,指定容量为initialCapacity。publicArrayList(intinitialCapacity){if(initialCapacity>0){this.elementData=newObject[initialCapacity];}elseif(initialCap
非欧空间计算加速:图神经网络与微分几何计算的GPU优化(流形数据的内存布局优化策略)
九章云极AladdinEdu
空间计算 神经网络 人工智能 gpu算力 算法 java 开发语言
一、非欧空间计算的革命性意义与核心挑战在三维形状分析、社交网络建模、分子动力学模拟等领域,非欧几里得空间数据(流形数据)的处理正推动人工智能技术向更复杂的几何结构迈进。传统欧式空间优化方法在处理流形数据时面临根本性局限:黎曼度量导致距离计算失效、局部坐标系动态变化引发内存访问模式混乱、曲率变化影响并行计算效率。本文提出基于分块流形存储(BlockedManifoldStorage,BMS)与层次化
Qt 下拉框QComboBox控件:从入门到实战
一、QComboBox核心功能解析1.核心属性属性说明当前示例场景count列表项总数统计学历下拉框中的选项数量editable是否允许用户编辑学历选择时可输入自定义学历currentText当前选中项的文本获取用户选择的"硕士"文本currentData当前选中项的附加数据获取太原对应的区号"0351"currentIndex当前选中项的索引位置(从0开始)确定"硕士"在列表中的位置2.核心方法
ubuntu qt环境下出现No suitable kits found解决方案
1.清理QtCreator缓存QtCreator会缓存项目配置、索引等数据,可能导致某些异常。清理方法:(1)删除QtCreator配置目录bashrm-rf~/.config/QtProject/(Ubuntu/Linux)或Windows:cmdrmdir/s/q"%APPDATA%\QtProject"(2)清除QtCreator的编译缓存bashrm-rf~/.cache/QtProjec
数据结构2-集合类ArrayList与洗牌算法
文章目录★引言:一.MyArrayList模拟实现(一)IList(二)MyArrayList(1)add(Tdata)(2)add(intpos,Tdata)(3)IllgalPosException(4)indexOf(ObjecttoFind)(5)contains(ObjecttoFind)(6)get(intpos)(7)set(intpos,Tvalue)(8)remove(Objec
Spring Boot与云原生:微服务架构的创新实践
tmjpz04412
spring kubernetes 云原生 java graphql
引言:Spring生态的演进与现状Spring框架的发展历程与核心设计理念当前Spring生态的核心组件(SpringBoot、SpringCloud、SpringData等)行业对Spring生态的依赖与创新需求SpringBoot的创新实践1.自动化配置与启动优化条件装配(@Conditional)的深度定制案例启动类加载机制与类路径扫描优化示例:通过自定义Starter实现快速集成第三方服务
Java注解笔记
m0_65470938
java 开发语言
一、什么是注解Java注解又称Java标注,是在JDK5时引入的新特性,注解(也被称为元数据)Javaa注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程元素类、方法、成员变量等)进行关联二、注解的应用1.生成文档这是最常见的,也是iava最早提供的注解2.在编译时进行格式检查,如@Overide放在方法前,如果你这个方法并不是看盖了超类Q方法,则编译时就能检查
Java 笔记 lambda
五行缺弦
Java笔记 java 笔记
✅Lambda基本语法(parameters)->expression或(parameters)->{statements}//无参数Runnabler=()->System.out.println("Hello");//单个参数(小括号可省略)Consumerc=s->System.out.println(s);//多参数+多语句Comparatorcomp=(a,b)->{System.out
论文阅读:《针对多目标优化和应用的 NSGA-II 综述》一些关于优化算法的简介
行然梦实
优化算法 论文阅读 算法 数学建模
前言提醒:文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。内容由AI辅助生成,仅经笔者审核整理,请甄别食用。文章目录前言一些关于优化算法的缩写优化算法Ma,Haiping&Zhang,Yajing&Sun,Shengyi&Liu,Ting&S
使用 C# 实现 FTP 上传的方法,包括详细的代码示例和测试代码
zhxup606
李工篇 C#实战教程 c# 开发语言
以下是使用C#实现FTP上传的方法,包括详细的代码示例和测试代码。以下代码使用System.Net.FtpWebRequest实现文件上传,并附带一个简单的测试用例。C#FTP上传方法csharpusingSystem;usingSystem.IO;usingSystem.Net;publicclassFtpClient{//////上传文件到FTP服务器//////FTP服务器地址,例如ftp:
Windows下Oracle安装图解
叫我老村长
Windows下Oracle安装图解----oracle-win-64-11g详细安装步骤一、Oracle下载官方下地址http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.htmlwin32位操作系统下载地址:http://download.oracle.com/otn/nt/oracle11g
基本服务 FTP & SMB
会飞的灰大狼
Centos7 linux
基本服务FTP&SMB前言:FTP简称为文件传输协议前面说的他可以做到备份的功能那么它可以做到文件传输的过程smb我们简单来说共享文件夹NFSNFS(NetworkFileSystem,网络文件系统)是一种分布式文件系统协议,允许不同计算机之间通过网络共享文件和目录,使远程文件系统像本地文件系统一样被访问。它最初由SunMicrosystems开发,现在已成为UNIX/Linux系统中常用的网络
Ubuntu lamp
会飞的灰大狼
linux ubuntu
Ubuntulamp前言在Ubuntu安装lamp架构我们了解到lamp是完整的架构我们前面了解到了集合了Linux系统apacheMySQL和PHP语言的完整架构我们前面说了Centos7中编译安装lamp那么我们去说一下在Ubuntu中安装安装apache2apt直接安装apache2apt-yinstallapache2启动apache2systemctlstartapache2#测
深入理解 UDP 协议:从原理到实战的技术解析
UDP(UserDatagramProtocol,用户数据报协议)作为TCP的"轻量型伙伴",在实时通信、流媒体传输等场景中发挥着不可替代的作用。与TCP的可靠传输不同,UDP以"简单、快速、无连接"为设计理念,为对延迟敏感的应用提供了高效传输方案。本文将从技术底层出发,系统解析UDP的核心机制、应用场景及实战实现,帮助读者构建对UDP协议的完整认知。一、UDP协议的核心定位与特性1.1协议栈中的
python3中,pycharm中怎么连接数据库
weixin_33736832
数据库 python 开发工具
因为python3现在还不能直接连接数据库,所有如果想连接,就只能通过以下方法:在APP中的,__init__.py中,添加以下代码就可以:importpymysqlpymysql.install_as_MySQLdb()当然前提是,那就的在setting.py中连接数据库添加所连接的mysql数据库的详细信息,如下:DATABASES={'default':{'ENGINE':'django.d
第三方库&第三方平台
lllaa
1.AFNetworking、MJRefresh、SDWebImage、Masonry、MJExtensionMBProgressHUDYYText、YYModel2.友盟分享极光推送神策TalkingData数盟可信ID能帮助APP公司在不同场景下确认设备唯一性,识别修改设备及复用、虚拟机刷量等行为,可以反作弊、防刷单,并通过数字联盟生成的设备ID和客户账户体系的关联,实时有效识别小号恶意注册等
java短路运算符和逻辑运算符的区别
3213213333332132
java基础
/*
* 逻辑运算符——不论是什么条件都要执行左右两边代码
* 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的
* 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。
*
* 并联电路两个开关只要有一个开关闭合,电路就会通。
* 类似于短路或(||),只要有其中一个为true(开关闭合)是
Java异常那些不得不说的事
白糖_
java exception
一、在finally块中做数据回收操作
比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。
JDBCAgent jdbc = new JDBCAgent();
try{
jdbc.excute("select * from ctp_log");
}catch(SQLException e){
...
}finally{
jdbc.close();
utf-8与utf-8(无BOM)的区别
dcj3sjt126com
PHP
BOM——Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如
JAVA Annotation之定义篇
周凡杨
java 注解 annotation 入门 注释
Annotation: 译为注释或注解
An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa
tomcat的多域名、虚拟主机配置
g21121
tomcat
众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。
很多朋友搜索的内容基本是告诉我们这么配置:
在Engine标签下增面积Host标签,如下:
<Host name="www.site1.com" appBase="webapps"
Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )
510888780
linux capistrano
1.ssh -v
[email protected] 出现
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
错误
运行状况如下:
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuratio
log4j的用法
Harry642
java log4j
一、前言: log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现, 当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中
mysql、sqlserver、oracle分页,java分页统一接口实现
aijuans
oracle jave
定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量
oracle分页:
select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart
sqlServer分页:
 
Hessian 简单例子
antlove
java Web service hessian
hello.hessian.MyCar.java
package hessian.pojo;
import java.io.Serializable;
public class MyCar implements Serializable {
private static final long serialVersionUID = 473690540190845543
数据库对象的同义词和序列
百合不是茶
sql 序列 同义词 ORACLE权限
回顾简单的数据库权限等命令;
解锁用户和锁定用户
alter user scott account lock/unlock;
//system下查看系统中的用户
select * dba_users;
//创建用户名和密码
create user wj identified by wj;
identified by
//授予连接权和建表权
grant connect to
使用Powermock和mockito测试静态方法
bijian1013
持续集成 单元测试 mockito Powermock
实例:
package com.bijian.study;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import or
精通Oracle10编程SQL(6)访问ORACLE
bijian1013
oracle 数据库 plsql
/*
*访问ORACLE
*/
--检索单行数据
--使用标量变量接收数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
select ename,sal into v_ename,v_sal
from emp where empno=&no;
dbms_output.pu
【Nginx四】Nginx作为HTTP负载均衡服务器
bit1129
nginx
Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:
负载均衡的好处
增加可用资源
增加吞吐量
加快响应速度,降低延时
出错的重试验机制
Nginx主要支持三种均衡算法:
round-robin
l
jquery-validation备忘
白糖_
jquery css F# Firebug
留点学习jquery validation总结的代码:
function checkForm(){
validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID
errorElement :"span",// 使用"div"标签标记错误, 默认:&
solr限制admin界面访问(端口限制和http授权限制)
ronin47
限定Ip访问
solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。
可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。
我们先看如何通过tomcat配置http授权限制。
第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如:
<userusername="ad
多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
bylijinnan
java 多线程
public class IncDecThread {
private int j=10;
/*
* 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
* 两个问题:
* 1、线程同步--synchronized
* 2、线程之间如何共享同一个j变量--内部类
*/
public static
买房历程
cfyme
2015-06-21: 万科未来城,看房子
2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675
2015-06-27: 房子首付,签完合同
2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。
首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-
[军事与科技]制造大型太空战舰的前奏
comsci
制造
天气热了........空调和电扇要准备好..........
最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界..........
所以,我们不得不关
dateformat
dai_lm
DateFormat
"Symbol Meaning Presentation Ex."
"------ ------- ------------ ----"
"G era designator (Text) AD"
"y year
Hadoop如何实现关联计算
datamachine
mapreduce hadoop 关联计算
选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。
以关联计算为例。
假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中?
&nbs
用户模型中修改用户信息时,密码是如何处理的
dcj3sjt126com
yii
当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。
场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。
面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这
中文 iOS/Mac 开发博客列表
dcj3sjt126com
Blog
本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。
本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。
本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。
js去除空格,去除左右两端的空格
蕃薯耀
去除左右两端的空格 js去掉所有空格 js去除空格
js去除空格,去除左右两端的空格
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g
SpringMVC4零配置--web.xml
hanqunfeng
springmvc4
servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。
ServletContainerInitializer:启动容器时负责加载相关配置
package javax.servlet;
import java.util.Set;
public interface ServletContainer
《开源框架那些事儿21》:巧借力与借巧力
j2eetop
框架 UI
同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。
故事1:巧借力,乌鸦也可以吃核桃
有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。
核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,
JQuery EasyUI 验证扩展
可怜的猫
jquery easyui 验证
最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。
以下内容只需要在公用js中添加即可。
使用类似于如下:
<input class="easyui-textbox" name="mobile" id="mobile&
架构师之httpurlconnection----------读取和发送(流读取效率通用类)
nannan408
1.前言.
如题.
2.代码.
/*
* Copyright (c) 2015, S.F. Express Inc. All rights reserved.
*/
package com.test.test.test.send;
import java.io.IOException;
import java.io.InputStream
Jquery性能优化
r361251
JavaScript jquery
一、注意定义jQuery变量的时候添加var关键字
这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:
$loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的
二、请使用一个var来定义变量
如果你使用多个变量的话,请如下方式定义:
. 代码如下:
var page
在eclipse项目中使用maven管理依赖
tjj006
eclipse maven
概览:
如何导入maven项目至eclipse中
建立自有Maven Java类库服务器
建立符合maven代码库标准的自定义类库
Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。
我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把
中国天气网省市级联页面
x125858805
级联
1、页面及级联js
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&l