.sql 是建表的 DDL (ATTACH TABLE ...
).
这里的 DDL 使用的是 ATTACH
语句, 进入文档 查看 ATTACH 的作用及跟 CREATE 的区别
基于这个信息,直接把 data
和 metadata
目录(要排除 system)复制到新集群,即可实现数据迁移。用一个小表做测试,验证可行。
操作流程
在源集群的硬盘上打包好对应数据库或表的 data 和 metadata 数据
拷贝到目标集群对应的目录
重启 clickhouse-server
使用 remote
表函数
ClickHouse 除了查询常规的表,还能使用表函数来构建一些特殊的「表」,其中 remote 函数 可用于查询另一个 ClickHouse 的表。
使用方式很简单:
SELECT * FROM remote('addresses_expr', db, table, 'user', 'password') LIMIT 10;
因此,可以借助这个功能实现数据迁移:
INSERT INTO .
SELECT * FROM remote('remote_clickhouse_addr', , , '', '')
操作流程
在源集群的 system.tables
表查询出数据库、表、DDL、分区、表引擎等信息
在目标集群上,运行 DDL 创建表,然后运行上述迁移语句复制数据
遍历所有表,执行 2
使用 clickhouse-copier
Clickhouse-copier 是 ClickHouse 官方提供的一款数据迁移工具,可用于把表从一个集群迁移到另一个(也可以是同一个)集群。Clickhouse-copier 使用 Zookeeper 来管理同步任务,可以同时运行多个 clickhouse-copier 实例。
使用方式:
clickhouse-copier --daemon --config zookeeper.xml --task-path /task/path --base-dir /path/to/dir
其中 --config zookeeper.xml
是 Zookeeper 的连接信息,--task-path /task/path
是 Zookeeper 里任务配置的节点路径。在使用时,需要先定义一个 XML 格式的任务配置文件,上传到 /task/path/description
里。同步任务是表级别的,可以配置的内容还比较多。Clickhouse-copier 可以监听 /task/path/description
的变化,动态加载新的配置而不需要重启。
操作流程
创建 zookeeper.xml
创建任务配置文件,格式见官方文档,每个表都要配置(可使用代码自动生成)
把配置文件内容上传到 Zookeeper
启动 clickhouse-copier 进程
理论上 clickhouse-copier 运行在源集群或目标集群的环境都可以,官方文档推进在源集群,这样可以节省带宽。
使用 clickhouse-backup
clickhouse-backup 是社区开源的一个 ClickHouse 备份工具,可用于实现数据迁移。其原理是先创建一个备份,然后从备份导入数据,类似 MySQL 的 mysqldump + SOURCE。这个工具可以作为常规的异地冷备方案,不过有个局限是只支持 MergeTree 系列的表。
操作流程
在源集群使用 clickhouse-backup create
创建备份
把备份文件压缩拷贝到目标集群
在目标集群使用 clickhouse-backup restore
恢复
对比
从官方和社区的一些资料综合来看 clickhouse-copier 功能最强大,不过考虑到数据量较少,而且对 clickhouse-copier 有些地方也不是很清楚,最终决定使用 remote
函数来做数据迁移。
关于别的数据迁移方案、更多的 clickhouse-copier 使用案例,可参考 Altinity 的博客 Clickhouse-copier in practice.
使用 remote
函数做数据迁移
使用 remote
函数还能实现更多特性:
对于分区表,可逐个分区进行同步,这样实际上同步的最小单位是分区,可以实现增量同步
可方便集成数据完整性(行数对比)检查,自动重新同步更新过的表
代码
代码如下,需要先安装 clickhouse-driver
import collections
import datetime
import functools
import logging
import time
from clickhouse_driver import Client
source_conn = Client(host='source-host', user='user', password='password')
target_conn = Client(host='target-host', user='user', password='password')
def format_partition_expr(p):
if isinstance(p, int):
return p
return f"'{p}'"
def execute_queries(conn, queries):
if isinstance(queries, str):
queries = queries.split(';')
for q in queries:
conn.execute(q.strip())
class Table(object):
def __init__(self, database, name, ddl, partition_key, is_view):
self.database = database
self.name = name
self.ddl = ddl.replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS')
self.partition_key = partition_key
self.is_view = is_view
def exists(self, conn):
q = f"SELECT name FROM system.tables WHERE database = '{self.database}' AND name = '{self.name}'"
return len(conn.execute(q)) > 0
def get_partitions(self, conn):
partitions = []
q = f'SELECT {self.partition_key}, count() FROM {self.identity} GROUP BY {self.partition_key} ORDER BY {self.partition_key}'
partitions = collections.OrderedDict(conn.execute(q))
return partitions
def get_total_count(self, conn):
q = f'SELECT COUNT() FROM {self.identity}'
return conn.execute(q)[0][0]
def check_consistency(self):
if not self.exists(target_conn):
return False, None
source_ttl_count = self.get_total_count(source_conn)
target_ttl_count = self.get_total_count(target_conn)
if source_ttl_count == target_ttl_count:
return True, None
if not self.partition_key:
return False, None
source_partitions = self.get_partitions(source_conn)
target_partitions = self.get_partitions(target_conn)
bug_partitions = []
for p, c in source_partitions.items():
if p not in target_partitions or c != target_partitions[p]:
bug_partitions.append(p)
return False, bug_partitions
def create(self, replace=False):
target_conn.execute(f'CREATE DATABASE IF NOT EXISTS {self.database}')
if self.is_view:
replace = True
if replace:
target_conn.execute(f'DROP TABLE IF EXISTS {self.identity}')
target_conn.execute(self.ddl)
def copy_data_from_remote(self, by_partition=True):
self.create()
if self.is_view:
logging.info('ignore view %s', self.identity)
return
is_identical, bug_partitions = self.check_consistency()
if is_identical:
logging.info('table %s has the same number of rows, skip', self.identity)
return
if self.partition_key and by_partition:
for p in bug_partitions:
logging.info('copy partition %s=%s', self.partition_key, p)
self._copy_partition_from_remote(p)
else:
self._copy_table_from_remote()
def _copy_table_from_remote(self):
queries = f'''
DROP TABLE {self.identity};
{self.ddl};
INSERT INTO {self.identity}
SELECT * FROM remote('{source_conn.host}', {self.identity}, '{source_conn.user}', '{source_conn.password}')
'''
execute_queries(target_conn, queries)
def _copy_partition_from_remote(self, partition):
partition = format_partition_expr(partition)
queries = f'''
ALTER TABLE {self.identity} DROP PARTITION {partition};
INSERT INTO {self.identity}
SELECT * FROM remote('{source_conn.host}', {self.identity}, '{source_conn.user}', '{source_conn.password}')
WHERE {self.partition_key} = {partition}
'''
execute_queries(target_conn, queries)
@property
def identity(self):
return f'{self.database}.{self.name}'
def __str__(self):
return self.identity
__repr__ = __str__
def get_all_tables() -> [Table]:
# 查询出所有用户的数据库和表,包括视图。视图依赖其他表,所以放到最后。
q = '''
SELECT database, name, create_table_query, partition_key, engine = 'View' AS is_view
FROM system.tables
WHERE database NOT IN ('system')
ORDER BY if(engine = 'View', 999, 0), database, name
'''
rows = source_conn.execute(q)
tables = [Table(*values) for values in rows]
return tables
def copy_remote_tables(tables):
for idx, t in enumerate(tables):
start_time = datetime.datetime.now()
logging.info('>>>> start to migrate table %s, progress %s/%s', t.identity, idx+1, len(tables))
t.copy_data_from_remote()
logging.info('<<<< migrated table %s in %s', t.identity, datetime.datetime.now() - start_time)
def with_retry(max_attempts=5, backoff=120):
def decorator(f):
@functools.wraps(f)
def inner(*args, **kwargs):
attempts = 0
while True:
attempts += 1
logging.info('start attempt #%s', attempts)
try:
f(*args, **kwargs)
except Exception as e:
if attempts >= max_attempts:
raise e
logging.exception('caught exception')
time.sleep(backoff)
else:
break
return inner
return decorator
@with_retry(max_attempts=10, backoff=60)
def main():
tables = get_all_tables()
logging.info('got %d tables: %s', len(tables), tables)
copy_remote_tables(tables)
if __name__ == '__main__':
main()
使用方式:直接运行即可,挂了重跑,不会有副作用。
局限性
仅通过对比行数来判断数据同步完整,没有比较内部数据的一致性,因此如果上游表行数不变,更新了部分字段,将无法自动识别,需要先从目标库里把表删掉重新同步。
你可能感兴趣的:(Clickhouse,Clickhouse,数据迁移)
【实战】Java应用一键复制部署+基础数据自动迁移,这套方案绝了!
混进IT圈
Java部署 Docker 数据迁移 一键部署 MySQL升级 Flyway 镜像管理
前言:还在为部署和数据迁移头疼?作为Java开发者,你是否遇到过这些场景:辛辛苦苦搭好的应用环境,给同事复现一份要手把手教3小时?部署时要手动装JDK、数据库、配置环境变量,步骤繁琐还容易出错?基础数据(如管理员账号、字典表)每次都要手动导入,版本不同还会报错?今天就给大家分享一套一站式解决方案:从应用打包、环境复制到基础数据自动迁移,全程自动化,小白也能一键搞定!一、先搞定“系统打包复制”:环境
【LINUX】MySQL 数据迁移指南:使用 LOAD DATA INFILE 高效导入 CSV 数据
百万数据的迁移耗时太久,所以采用服务器端直接加载:绕过客户端-服务端通信,直接由服务器读取。1.开始我就整理好了数据到txt格式,都是insert语句,但是需要csv格式,所以执行了。sed-E's/^INSERTINTO`t_student`VALUES\((.*)\);?/\1/'inserts.txt|sed"s/'//g">your_file.csv检查前几行结果head-n5your_f
阿里云2核8G云服务器优惠价格解析:最低仅需652.32元1年
阿里云最新优惠和活动汇总
目前在阿里云2024年活动中,2核8G配置价格最低的是通用算力型u1实例,价格只要652.32元1年,除此之外,还有经济型e、通用型g8a、通用型g8i、通用型g8y等实例2核8G配置均有活动优惠。本文将为您详细解读阿里云2024年2核8G配置云服务器的优惠活动,帮助您更好地了解和选择适合自己的云服务器。一、活动背景与概述随着数字化转型的加速推进,越来越多的企业和个人开始将业务和数据迁移至云端。阿
python 链接clickhouse 连接不上
无我_a50f
原因:clickhouse-driver使用的是tcp端口:9000java驱动clickhouse-jdbc使用的是http端口:8123
SmartETL中数据库操作与流程解耦的设计与应用
正如ETL这个概念本身所指示的,数据库读写访问是ETL的最常用甚至是最主要的操作。现代信息系统的设计与运行基本都是围绕数据库展开的,很多应用的核心功能都是对数据库的CRUD(创建、检索、更新、删除)操作。SmartETL框架设计之初就考虑到了这个情况,在早期就根据团队的技术栈,实现了对MongoDB、MySQL、ElasticSearch、ClickHouse等数据库的Extract操作(即Loa
Apache IoTDB 集群数据迁移指南
静默小音箱
编程问题解决手册 apache iotdb 个人开发
随着物联网(IoT)设备的普及和数据量的激增,数据存储和管理的需求也随之增加。ApacheIoTDB作为一个专为时序数据设计的数据库系统,提供了从单机到集群的多种部署方案。最近,我将ApacheIoTDB从单机版本扩展到了集群版本,并遇到了一个有趣的问题:如何将一个集群的数据迁移到另一个集群?单机版本与集群版本的迁移对比在单机版本的ApacheIoTDB中,数据迁移非常简单。我们只需要将数据文件夹
MySQL(150)如何进行数据库自动化运维?
辞暮尔尔-烟火年年
MySQL 数据库 运维 mysql
数据库自动化运维(DBAAutomation)是确保数据库高效、安全运行的关键步骤。自动化运维可以涵盖备份、恢复、监控、性能优化、数据迁移等多个方面。以下是一个详细的指南,展示如何使用Java进行数据库自动化运维,包括代码示例。一、环境准备确保安装有Java开发环境(JDK)、Maven(或Gradle)以及一个数据库(例如MySQL)。我们将使用JDBC来进行数据库操作,以及QuartzSche
Codis的槽位迁移与ConcurrentHashMap扩容的相似之处
Momentary_SixthSense
redis java tcp/ip 网络 mysql android 网络协议
Codis的槽位迁移过程与ConcurrentHashMap(CHM)的扩容在核心思想上非常相似,都采用了“渐进式数据迁移”和“请求转发”的机制来保证平滑性和高可用性。它们都避免了传统的一次性全量迁移导致的长时间服务中断。相似之处:分片/分段:Codis:数据被分配到固定的1024个Slot中。迁移的单位是Slot。CHM:数据被分配到多个Segment/Bucket中(Java8之前是Segme
clickhouse字符串函数
鸭梨山大哎
clickhouse clickhouse 字符串
长度以及大小写SELECT--11length('helloworld')asstr_length,--判断字符串是否为空,空为1,非空为0--0empty('helloworld'),--1notEmpty('helloworld'),--11lengthUTF8('helloworld'),--11char_length('helloworld'),--同lengthUTF8()--11cha
ubuntu部署gitlab-ce及数据迁移
SilentCodeY
java 开发语言 gitlab ubuntu
ubuntu部署gitlab-ce及数据迁移进行前梳理:在esxi7.0Update3基础上使用ubuntu22.04.5-server系统对gitlab-ce16.10进行部署,以及将gitlab-ee16.9数据进行迁移到gitlab-ce16.10进行后总结:起初安装了极狐17.8.3-jh版本(不支持全局中文,就没用了)又安装了gitlab-ce16.10.10,(和旧服务器版本不一致,备
应用集成体系深度解析:从数据互通到流程协同
一、应用集成核心概念框架应用集成功能互操作业务逻辑驱动异构系统协同语义互理解协议兼容1.本质定义核心内涵:多个应用系统基于业务逻辑的功能级互操作关键特征:业务逻辑驱动的功能调用(非简单数据传递)双向/多向的交互式通信实时或近实时的响应机制与传统集成区别:数据集成静态数据迁移字段映射应用集成动态功能协同服务调用二、分层支撑体系1.基础支撑层层级功能技术实现关键指标网络集成物理连通性TCP/IP,VL
JFinal项目demo,实现多数据源,数据迁移,从一张表,将数据添加到另外的一张表
苦荞_
java 开发语言
一、废话今天项目经理给了我一个任务,就是需要将一个数据库中字典表的数据,相对应的添加到另外一张表中,这里将有数据的字典表成为dict嘛,需要添加数据的表为test表,我写的demo中表名也是这样的。当然呢,最开始我也是手动写SQL语句添加数据,搞了一两个字典数据,就着不住了,实际项目中的字典表数据是非常多的。一个字典类型有的就上千条数据,我一想,像我楞个加,得加到什么时候去。先想到的就是在原项目中
四. go 常见数据结构实现原理之 map
苹果香蕉西红柿
# 二. Go 常见数据结构实现原理 数据结构 golang 哈希算法
目录一.基础hash的基本方案二.map初始化创建map的底层结构hmapbucket桶桶的细节总结minTopHash与是否迁移extra一些重要的常量标志初始化三.插入数据存储数据时key的定位策略四.查询数据五.删除六.扩容扩容策略与扩容大小扩容与数据迁移源码七.总结map底层结构相关问题总结初始化底层总结插入数据底层总结查询数据底层总结扩容底层总结常见问题一.基础在go基础入门十一map集
大数据技术之集群数据迁移
dfs.namenode.rpc-address.nameservice1.namenode30hadoop104:8020dfs.namenode.rpc-address.nameservice1.namenode37hadoop106:8020dfs.namenode.http-address.nameservice1.namenode30hadoop104:9870dfs.namenode.
SQL Server 2000 数据导出及迁移脚本实战指南
己见明
本文还有配套的精品资源,点击获取简介:在数据库管理中,数据备份和迁移是关键任务。本文将介绍如何使用SQLServerManagementStudio(SSMS)为SQLServer2000生成数据脚本,包括触发器、存储过程、视图等数据库对象的脚本生成,以及如何利用这些脚本进行数据库初始化、数据迁移和数据备份等操作。此外,还提到了专门的第三方工具“MsSql数据记录脚本-导出工具2.0”,并解释了数
Oracle数据库不同场景批量插入数据的方式汇总
Favor_Yang
SQL调优及高级SQL语法编写 oracle 数据库
批量数据插入是数据库操作中的常见需求,Oracle数据库提供了多种高效的数据批量加载方法。不同方法适用于不同场景,从少量数据到海量数据迁移均可找到合适的解决方案。传统单条INSERT语句最基本的插入方式是通过单条INSERT语句逐行插入数据。这种方法语法简单直观,适用于少量数据插入场景。然而当数据量较大时,频繁的SQL解析和网络往返会显著降低性能。示例代码:INSERTINTOemployees(
Hana 到 PostgreSQL 数据迁移同步
简述SAPHana与PostgreSQL已成为许多企业常用的两款重要数据库,实现这两者之间高效稳定的数据传输也是许多企业的诉求之一。本文将介绍如何使用国产数据迁移同步工具CloudCanal构建一条Hana到PostgreSQL的数据同步链路。技术点表级别CDC表CloudCanal在实现Hana源端增量同步时,最初采用的是单CDC表的模式,即所有订阅表的增量数据(插入、更新、删除)通过触发器统一
Dify迁移流程(全部内容迁移,指定账户迁移)
想想lcj会怎么做
docker postgresql llama
自己在工作中因为涉及到对dify的迁移问题,于是自己根据网上的资料和自己工作的需求实现了两种数据迁移方式。环境:1.完全迁移顾名思义就是将项目A的账号a下的所有数据都迁移到项目B中此该过程很简单,只需要将docker目录下的volume打包然后放到新的项目目录下解压即可。具体流程请参考社区版dify数据迁移(比较全面)_dify如何迁移-CSDN博客环境要求-全ubuntu系统或者windows+
oracle pg 文件级迁移,从Oracle迁移到AntDB(二)-- ora2pg-对象和数据的导出导入
使用Ora2pg和psqlcopy方式进行数据迁移author:yafeishitags:AntDB,ora2pg,oracleAntDB:github_url,基于postgresql的高性能分布式数据库使用Ora2pg和psqlcopy方式进行数据迁移准备工作使用本文档的前提本文档指导如何使用ora2pg进行oracle到ADB的数据迁移,但是在参照本文档操作之前,有以下条件必须满足:-ADB
clickhouse分布式表插入数据不用带ON CLUSTER
时时刻刻看着自己的心
clickhouse 分布式
向分布式表插入数据时,通常不需要使用ONCLUSTER,因为分布式表的写入操作会自动将数据分发到底层表(bm_online_user_count_part)的对应节点。但对于DDL(数据定义语句,例如ALTERTABLE)操作,在分布式环境中修改底层表时,建议使用ONCLUSTER,以确保所有相关节点上的表结构和数据同步。区分DDL和DMLDML(数据操作语句,例如INSERT)向分布式表插入数据
MaxCompute数据迁移至OSS完全指南
大模型大数据攻城狮
odps 大数据 阿里云 maxcompute dataworks tunnel sdk oss
目录1.为什么要把MaxCompute的数据搬到OSS?2.工具与环境准备:别急,先把家伙事儿备齐3.迁移方式总览:选对路子事半功倍4.用DataWorks实现数据迁移:点几下鼠标就搞定4.1配置数据源4.2创建同步任务4.3调度与运行5.用INSERT语句写入OSS外部表:SQL爱好者的最爱5.1创建OSS外部表5.2插入数据6.用Tunnel命令行实现数据迁移:硬核玩家的选择6.1Tunnel
ClickHouse高频面试题
野老杂谈
数据库
ClickHouse高频面试题1、简单介绍一下ClickHouse2、ClickHouse具有哪些特点3、ClickHouse作为一款高性能OLAP数据库,存在哪些不足4、ClickHouse有哪些表引擎5、介绍下Log系列表引擎应用场景共性特点不支持6、简单介绍下MergeTree系列引擎7、简单介绍下外部集成表引擎ODBCJDBCMySQLHDFSKafkaRabbitMQ8、ClickHou
GlusterFS 分布式文件系统详解
Sally璐璐
运维 运维
一、核心特性高扩展性GlusterFS采用无共享架构,支持横向扩展,只需添加服务器节点即可提升存储容量和性能,理论上可达PB甚至EB级规模,且扩展过程对上层应用完全透明。例如,一个初始4节点、20TB的集群可无缝扩展至100节点、500TB规模,仅需执行简单扩容命令,无需中断服务或数据迁移。详细扩容步骤:准备新服务器并安装GlusterFS软件确保操作系统版本兼容安装glusterfs-serve
如何将应用程序从 iPhone 传输到Mac电脑
Coolmuster
苹果手机 iPhone iOS iphone macos ios
我们的设备常常需要同步以保持数据的一致性。对于iPhone用户来说,将应用程序和数据同步到Mac电脑上可以带来极大的便利,无论是为了备份、跨设备使用还是数据迁移。一、为什么需要将iPhone应用程序同步到Mac?在多种情况下,用户可能需要将iPhone上的应用程序同步到Mac上,例如:跨设备工作流程,需要在Mac上继续使用iPhone应用程序。备份应用程序及其数据,以防丢失。将iPhone上购买的
clickhouse数据库表和doris数据库表迁移starrocks数据库时建表注意事项总结
积跬步,慕至千里
软件安装及程序错误解决方案集 数据库 clickhouse
目录零、前言一、clickhouse数据库表在starrocks数据库建表时问题总结1.1数据类型类问题:1.2数据导出阶段:二、doris数据库表在starrocks数据库建表时问题总结2.1properties不支持的属性(直接删除):2.2properties需修改属性2.3properties:doris建表语句分区明细,starrocks数据不需要明确设定,会自动更新2.4分桶设置问题2
redis跨db跨redis迁移方案选型
redis
redis本身有rdb备份功能,整个文件备份和恢复的策略。但是这个适合的场景比较窄,有些场景,比如从db0导出到db1,或者是跨redis,跨机房迁移redis,rdb的方式显然是不适合的,因为对方的redis可能有其他的数据,不可能使用你本地备份的rdb文件来取代目标redis的rdb文件。因此,我研究了好几种redis客户端工具,做来选型。下面是我研究过的数据迁移工具:redis-dump:命
KingbaseES 到 Apache Doris 实时同步实践|国产数据库数据入仓解决方案
数据库
国产数据库加速进入核心系统,传统同步工具却频频“掉链子”。本系列文章聚焦OceanBase、GaussDB、TDSQL、达梦等主流信创数据库,逐一拆解其日志机制与同步难点,结合TapData的实践经验,系统讲解从CDC捕获到实时入仓(Doris、StarRocks、ClickHouse等)的完整链路构建方案,为工程师提供切实可行的替代路径与最佳实践。本篇任务:KingbaseES→ApacheDo
Flink ClickHouse 连接器:实现 Flink 与 ClickHouse 无缝对接
Edingbrugh.南空
大数据 flink flink clickhouse 大数据
引言在大数据处理领域,ApacheFlink是一款强大的流处理和批处理框架,而ClickHouse则是一个高性能的列式数据库,专为在线分析处理(OLAP)场景设计。FlinkClickHouse连接器为这两者之间搭建了一座桥梁,使得用户能够在Flink中方便地与ClickHouse数据库进行交互,实现数据的读写操作。本文将详细介绍FlinkClickHouse连接器的相关内容,包括其特点、使用方法
ClickHouse【理论篇】01:什么是ClickHouse
ClickHouse是一款开源的列式数据库管理系统(Column-OrientedDBMS),专为高性能实时数据分析(OLAP,OnlineAnalyticalProcessing)场景设计。它由俄罗斯搜索引擎公司Yandex开发(2016年开源),目前由独立基金会ClickHouse,Inc.维护,广泛应用于大数据分析、日志处理、用户行为洞察等领域。一、核心定位:OLAP场景的“性能标杆”传统关
ClickHouse【理论篇】02:ClickHouse架构和组件
做一个有趣的人Zz
ClickHouse clickhouse 架构
ClickHouse的架构设计深度适配OLAP(在线分析处理)场景,通过列式存储、向量化执行、分布式分片与副本等核心技术,实现了对海量数据的高效分析与实时查询。以下从核心存储引擎、查询处理流程、分布式架构、元数据管理、复制与分片等维度详细解析其内部架构与关键组件。一、核心存储引擎:MergeTree系列ClickHouse的存储引擎是其性能的核心,其中MergeTree系列引擎(如MergeTre
jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
js jquery keydown keypress keyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){  
AngularJS中的Promise
bijian1013
JavaScript AngularJS Promise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
c++ 用数组实现栈类
CrazyMizzz
数据结构 C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
java和c语言的雷同
麦田的设计者
java 递归 scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
ext右下角浮动窗口
知了ing
JavaScript ext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
Spring Aop Schema实现
bijian1013
java spring AOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
java-两种方法求第一个最长的可重复子串
bylijinnan
java 算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
java netty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
servelt filter listener 的生命周期
cngolon
filter listener servelt 生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
vi查找替换命令详解
daizj
linux 正则表达式 替换 查找 vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
对网站中的js,css文件进行打包
dcj3sjt126com
PHP 打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
linux 文件格式(1) sed工具
eksliang
linux linux sed工具 sed工具 linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
HoverTree开发日志之验证码
hvt
.net C# asp.net hovertree webform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
数据结构随记_2
lx.asymmetric
数据结构 笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
C 语言初级入门--二维数组和指针
1140566087
二维数组 c/c++ 指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息