目录

1.clickhouse数据库安装说明

2.clickhouse数据库安装介质

3.clickhouse数据库安装前配置

3.1配置操作系统yum源(可选)

3.2配置NTP客户端

3.3配置sudo、NetworkManager、firewalld、selinux

3.4创建用户

3.5修改系统参数与限制

3.6修改主机名称与host文件

3.7关闭透明大页、调整CPU固定高频、关闭SWAP

4. clickhouse数据库安装

4.1创建目录

4.2安装数据库软件

4.3编辑配置文件

4.4启动数据库

4.5创建数据副本表

4.6创建分布式表

5. zookeeper集群安装

5.1安装要求

5.2创建目录

5.3 安装zookeeper,编辑配置文件

5.4 创建 zookeeper 用户

5.5 启动zookeeper集群


1.clickhouse数据库安装说明

clickhouse提供了集群机制支持,集群有两种实现方式,一是数据副本,即全量数据冗余到另外的机器,提供高可用保证。二是分布式表,即以表为单位将数据分散到多个节点上保存,用以解决单机存储不足问题。

生产环境通常使用数据副本架构,确保数据安全与生产业务的高可用性;对于分布式表,由于数据分布在多个节点,查询可能从多节点获取数据再组合加工,因网络延时等原因查询效率相对较低,也有数据不一致的风险,适用场景较少。

部署clickhouse采用数据副本架构,2台机器作为clickhouse专用服务器,即2个节点保存相同数据;3台机器部署zookeeper集群,为clickhouse数据同步提供服务。因zookeeper对数据延迟非常敏,而clickhouse数据库可能占用所用可用的系统资源,所以强烈推荐生产环境zookeeper与clickhouse使用不同的服务器部署,或者已有zookeeper集群且未超载的情况下,复用现有的zookeeper。

部署clickhouse所需服务器资源配置如下表,生产环境根据实际业务量调整资源配置,推荐使用SSD存储设备。

服务器名

ip

操作系统

cpu

内存

用途1

用途2

ch01

10.82.88.182

CentOS Linux release 7.9

8c

16G

clickhouse集群

zookeeper集群

ch02

10.82.88.183

CentOS Linux release 7.9

8c

16G

clickhouse集群

zookeeper集群

ch03

10.82.88.184

CentOS Linux release 7.9

8c

16G

 

zookeeper集群

2.clickhouse数据库安装介质

官方预构建的二进制文件通常针对x86_64进行编译,并利用SSE 4.2指令集,检查当前CPU是否支持SSE 4.2的命令。

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

服务器CPU检查通过,选择RPM包进行安装,数据库版本使用更加稳定的最新的LTS(Long Term Support)版本 22.8,下载以下3个安装包。

https://packages.clickhouse.com/rpm/stable/

clickhouse-common-static-22.8.9.24.x86_64.rpm

clickhouse-client-22.8.9.24.x86_64.rpm

clickhouse-server-22.8.9.24.x86_64.rpm

3.clickhouse数据库安装前配置

3.1配置操作系统yum源(可选)

通常操作系统以最小化方式安装,配置yum源可以为后续安装软件提供很大的便利。yum源推荐使用内网环境提供的地址,若无法获得,则挂载操作系统安装盘,配置本地yum源。注意yum源需要和操作系统版本相同,安装使用的操作系统为CentOS Linux release 7.9.2009,配置本地yum源操作如下。

挂载光盘文件 CentOS-7-x86_64-Everything-2009.iso,编辑repo文件,注意 "/run/media/root/CentOS\ 7\ x86_64" 替换为对应的挂载路径。

cat >/etc/yum.repos.d/Centos7_local.repo <<EOF

[CentOS7]

name=CentOS-server

baseurl=file:///run/media/root/CentOS\ 7\ x86_64

enabled=1

gpgcheck=0

EOF

3.2配置NTP客户端

根据现网使用的实际ntp server进行调整。

ip=xxx.xxx.xxx.xxx

ntpdate $ip

sed -i "s/server 3.centos.pool.ntp.org/server $ip/g" /etc/chrony.conf

sed -i "s/server 0.centos.pool.ntp.org/#server 0.centos.pool.ntp.org/g" /etc/chrony.conf

sed -i "s/server 1.centos.pool.ntp.org/#server 0.centos.pool.ntp.org/g" /etc/chrony.conf

sed -i "s/server 2.centos.pool.ntp.org/#server 0.centos.pool.ntp.org/g" /etc/chrony.conf

systemctl enable chronyd

systemctl start chronyd

systemctl status chronyd

3.3配置sudo、NetworkManager、firewalld、selinux

echo "clickhouse  ALL=(ALL)  NOPASSWD: /bin/su - root" >> /etc/sudoers

systemctl disable NetworkManager

systemctl stop NetworkManager

systemctl disable firewalld

systemctl stop firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

3.4创建用户

新建用户,替换命令中的密码,进行密码设置。

groupadd clickhouse

useradd -g clickhouse clickhouse

echo "umask 022" >> /home/clickhouse/.bash_profile

echo "xxxx" | passwd --stdin clickhouse

3.5修改系统参数与限制

cat >> /etc/security/limits.conf  << EOF

* soft nproc 65536

* hard nproc 65536

* soft nofile 655360

* hard nofile 655360

EOF

3.6修改主机名称与host文件

根据实际情况修改主机名,3台机器分别执行:

hostnamectl set-hostname ch01

hostnamectl set-hostname ch02

hostnamectl set-hostname ch03

cat >> /etc/hosts  << EOF

10.82.88.182 ch01

10.82.88.183 ch02

10.82.88.184 ch03

EOF

每台机器的名称和IP映射关系都需要写入到host文件中,zookeeper集群机器IP信息也需要写入到host文件。

3.7关闭透明大页、调整CPU固定高频、关闭SWAP

查看是否使用透明大页

cat /sys/kernel/mm/transparent_hugepage/enabled

查看CPU频率策略

cpupower frequency-info --policy

a.执行 tuned-adm list 命令查看当前操作系统的 tuned 策略。

b.创建新的 tuned 策略。

mkdir /etc/tuned/balanced-ch-optimal/

cat > /etc/tuned/balanced-ch-optimal/tuned.conf <<EOF

[main]

include=balanced

[cpu]

governor=performance

[vm]

transparent_hugepages=never

EOF

c.应用新的 tuned 策略。

tuned-adm profile balanced-ch-optimal

修改后检查:

cat /sys/kernel/mm/transparent_hugepage/enabled

cpupower frequency-info --policy

关闭swap

echo "vm.swappiness = 0">> /etc/sysctl.conf

swapoff -a && swapon -a

sysctl -p

调整内存分配策略

echo 0 | sudo tee /proc/sys/vm/overcommit_memory

至此,完成操作系统相关设置,下一章节进行数据库安装。

4. clickhouse数据库安装

数据库集群部署在节点ch01 (10.82.88.182)与ch02(10.82.88.183),需要在两个节点均执行以下操作。

4.1创建目录

创建clickhouse日志目录与数据文件目录,可根据实际情况调整。

mkdir -p /opt/clickhouse_logs

mkdir -p /opt/clickhouse

chown -R clickhouse:clickhouse /opt/clickhouse_logs

chown -R clickhouse:clickhouse /opt/clickhouse

4.2安装数据库软件

上传安装包,检查安装包md5值

md5sum clickhouse-common-static-22.8.9.24.x86_64.rpm

f3c6bb13102ca5418b778b9f6ce7c3bf  clickhouse-common-static-22.8.9.24.x86_64.rpm

md5sum clickhouse-client-22.8.9.24.x86_64.rpm

44bfe6eb388905c2037ce3e6717b3e4c  clickhouse-client-22.8.9.24.x86_64.rpm

md5sum clickhouse-server-22.8.9.24.x86_64.rpm

c1acc4debcc1fab2ee0257b8689d140a  clickhouse-server-22.8.9.24.x86_64.rpm

依次执行

rpm -ivh clickhouse-common-static-22.8.9.24.x86_64.rpm

rpm -ivh clickhouse-client-22.8.9.24.x86_64.rpm

rpm -ivh clickhouse-server-22.8.9.24.x86_64.rpm

在安装clickhouse-server-22.8.9.24.x86_64.rpm时需要输入数据库用户default的密码,请输入并记住密码,后续登录数据库需要使用。

至此,完成数据库软件安装。

数据库的默认配置文件目录是 /etc/clickhouse-server

默认日志目录是 /var/log/clickhouse-server/

默认数据文件目录是 /var/lib/ clickhouse

默认提供sytemclt启停,先不启动数据库,编辑配置文件后再启动数据库,数据库在启动时会自动初始化。

4.3编辑配置文件

clickhouse安装后生成两个配置文件,/etc/clickhouse-server/ config.xml 服务器级配置文件;/etc/clickhouse-server/ users.xml 用户级配置文件。

4.3.1编辑 /etc/clickhouse-server/config.xml

可以使用vi /etc/clickhouse-server/config.xml 修改文件,或者使用sed命令,注意本文件属性为只读,vi保存时需要使用 wq!

1)允许远程访问

<!-- <listen_host>::</listen_host> --> 去掉注释。

sed -i 's/<!-- <listen_host>::<\/listen_host> -->/<listen_host>::<\/listen_host>/g' /etc/clickhouse-server/config.xml

修改后入下图:

2interserver_http_host去掉注释,修改为本机IP,注意两节点IP不相同。

修改前:

<!--

<interserver_http_host>example.clickhouse.com</interserver_http_host>

-->

修改后ch01节点如下图:

修改后ch02节点如下图:

3)启用zookeeper

找到zookeeper相关内容,修改前如下图:

zookeeper相关内容默认处于注释状态,使用zookeeper则要去掉注释,并且修改host中example1,example2,example3分别为zookeeper集群3个节点的IP(10.82.88.182/183/184)。修改后如下图:

4)启用宏(macros

找到macros相关内容,修改前如下图:

macros相关内容默认处于注释状态,使用macros则去掉注释;修改example01-01-1为本节点的主机名,不同节点值不同,比如节点ch01把example01-01-1修改为ch01,节点ch02把example01-01-1修改为ch02。

ch01节点修改后如下图:

ch02节点修改后如下图:

5)修改目录

日志默认路径是 /var/log/clickhouse-server ,修改为/opt/clickhouse_logs,根据实际情况修改。

数据默认路径是 /var/lib/clickhouse ,修改为/opt/clickhouse,可根据实际情况修改。

修改命令:

sed -i 's/\/var\/log\/clickhouse-server/\/opt\/clickhouse_logs/g' /etc/clickhouse-server/config.xml

sed -i 's/\/var\/lib\/clickhouse/\/opt\/clickhouse/g' /etc/clickhouse-server/config.xml

4.3.2编辑 /etc/clickhouse-server/user.xml

以下参数需要调优,具体参数值根据实际情况进行调整。

background_pool_size :后台线程数,默认16,建议调整为cpu逻辑线程数的2倍(cpu逻辑线程数cat /proc/cpuinfo |grep processor|wc -l)。

background_distributed_schedule_pool_size :分布式后台任务线程数,默认16,建议改成cpu个数的2倍(线程数)。

max_memory_usage :单次查询可使用的内存最大值,clickhouse数据库专用服务器可以设置为服务器内存的60%以上。

max_memory_usage_for_all_queries : 所有查询可使用的内存最大值,建议与 max_memory_usage 相同。

max_bytes_before_external_group_by :group by 内存量使用量,建议设置为 max_memory_usage的一半,当group by使用内存超过设置值后会使用磁盘进行排序。

max_bytes_before_external_sort : order by 内存使用量,建议与max_bytes_before_external_group_by相同,当order by使用内存超过设置值后会使用磁盘进行排序。

执行如下命令:

sed -i '/<load_balancing>/i\            <max_memory_usage>10737418240</max_memory_usage>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <max_memory_usage_for_all_queries>10737418240</max_memory_usage_for_all_queries>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <max_bytes_before_external_group_by>5368709120</max_bytes_before_external_group_by>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <max_bytes_before_external_sort>5368709120</max_bytes_before_external_sort>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <background_pool_size>16</background_pool_size>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <background_distributed_schedule_pool_size>16</background_distributed_schedule_pool_size>' /etc/clickhouse-server/users.xml

增加default用户访问权限

sed -i 's/<!-- <access_management>1<\/access_management> -->/<access_management>1<\/access_management>/g' /etc/clickhouse-server/users.xml

执行后如下图:

4.4启动数据库

zookeeper启动后方可启动clickhouse数据库,若还未安装zookeeper集群,请先安装并启动。zookeeper安装部署请参见第5章。

systemclt 相关命令如下:

systemctl start clickhouse-server

systemctl stop clickhouse-server

systemctl restart clickhouse-server

systemctl status clickhouse-server

clickhouse-client登录命令:

clickhouse-client --host 10.82.88.182 -m --password xxxx

4.5创建数据副本表

副本的目的是保障数据的高可用。当一台clickhouse节点宕机了,可以从其他备份服务器获得相同的数据。clickhosue只有MergeTree系列的表引擎可以支持副本。针对MergeTree系列的表引擎,clickhouse都提供了对应的Replicated*MergeTree表引擎来支持数据副本。

clickhouse的数据副本机制是表级别的,也就是说只针对表进行复制,一个数据库中可以同时包含复制表和非复制表。副本机制对于select查询是没有影响的,查询复制表和非复制表的速度是一样的。而写入数据时,clickhouse的集群没有主从之分,大家都是平等的。只不过配置了复制表后,insert以及alter操作会同步到对应的副本机器中。

搭建两节点clickhouse,通过zk进行数据同步,创建库表的操作需要在两节点执行。分别登录到两节点创建数据库和表,执行如下语句。

create database test;

use test;

create table t_stock(id UInt32,sku_id String,total_amount decimal(16, 2),create_time datetime) engine = ReplicatedMergeTree('/clickhouse/tables/test/t_stock','{replica}')  primary key id ;

建表语句语法:

create table table_name(...) engine=ReplicatedMergeTree('zoo_path','replica_name')

引擎使用 ReplicatedMergeTree ,zoo_path为 /clickhouse/tables/test/t_stock ,是ZooKeeper中该表的路径 ; replica_name为 {replica} ,是ZooKeeper 中的该表的副本名称。

复制表路径必须一致,"/clickhouse/tables"为固定前缀,"test"是库名,"t_stock"是表名

副本名称必须不相同,所以使用宏 {replica},创建时匹配配置文件中的值。

在某个节点写入数据,数据会自动同步到另外一个节点。

insert into t_stock values(1,'10000',2000,'2022-12-12');

如果删除表drop table 需要加sync。

drop table t_stock sync;

4.6创建分布式表

完成步骤4.1-4.4后,编辑配置文件/etc/clickhouse-server/config.xml,使用分布式表。找到config.xml中 remote_servers 部分,删除<remote_servers> </remote_servers>之间所有内容,加入以下内容。

<bigdata>

<shard>

<weight>1</weight>

<internal_replication>false</internal_replication>

<replica>

<host>10.82.88.182</host>

<port>9000</port>

<user>default</user>

<password>xxx</password>

</replica>

</shard>

<shard>

<weight>1</weight>

<internal_replication>false</internal_replication>

<replica>

<host>10.82.88.183</host>

<port>9000</port>

<user>default</user>

<password>xxx</password>

</replica>

</shard>

</bigdata>

<host>10.82.88.182</host>为clickhouse的IP,根据实际情况修改,<port>9000<port>,<user>default</user>是数据库用户,<password>xxx</password>是安装rpm包时输入的密码。配置了2个分片,分别节点为10.82.88.182和10.82.88.183,权重相等都是1,若有更多分片,可以再此基础上增加。每个节点均进行相同配置,然后重启数据库

登录到任意一台数据库,执行语句创建库表,语句使用“on cluster saxo”,在每个分片节点创建相同的库表,t_stock_local为本地表,是数据实际存储位置;t_stock_distributed为分布式表,是本地表的映射表。

分布式表中ENGINE = Distributed(saxo,test02,t_stock_local,hiveHash(sku_id)),saxo为集群名称,test02为数据库名,t_stock_local为本地表名,hiveHash(sku_id)分片键。

create database test02 on cluster saxo;

use test02;

CREATE TABLE t_stock_local on cluster saxo

(

id UInt32,

sku_id String,

total_amount Decimal(16, 2),

create_time DateTime

)

ENGINE = MergeTree()

PRIMARY KEY id

ORDER BY (id, sku_id);

CREATE TABLE t_stock_distributed on cluster saxo

(

id UInt32,

sku_id String,

total_amount Decimal(16, 2),

create_time DateTime

)

ENGINE = Distributed(saxo,test02,t_stock_local,hiveHash(sku_id));

insert into t_stock_distributed values (1,101,1000,'2022-12-08');

insert into t_stock_distributed values (2,102,1000,'2022-12-08');

insert into t_stock_distributed values (3,103,1000,'2022-12-08');

insert into t_stock_distributed values (4,104,1000,'2022-12-08');

insert into t_stock_distributed values (5,105,1000,'2022-12-08');

insert into t_stock_distributed values (6,106,1000,'2022-12-08');

insert into t_stock_distributed values (7,107,1000,'2022-12-08');

insert into t_stock_distributed values (8,108,1000,'2022-12-08');

insert into t_stock_distributed values (9,109,1000,'2022-12-08');

insert into t_stock_distributed values (10,110,1000,'2022-12-08');

insert into t_stock_distributed values (11,111,1000,'2022-12-08');

insert into t_stock_distributed values (12,112,1000,'2022-12-08');

往分布式表t_stock_distributed中写入数据,其他分片节点查询t_stock_distributed获取全量数据,同时查询到本地表t_stock_local只包含部分数据。

5. zookeeper集群安装

zookeeper集群安装节点为10.82.88.182、10.82.88.183、10.82.88.184,需要在3个节点均执行创建目录,安装软件、编辑配置文件、创建用户、启动集群等操作。

5.1安装要求

clickhouse要求zookeeper版本不低于3.4.5,下载最新稳定版本 apache-zookeeper-3.7.1-bin.tar.gz。下载链接:

https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz

zookeeper需要JDK环境支持,自行安装一个jdk8即可

5.2创建目录

mkdir /opt/zookeeper/

mkdir -p /opt/zookeeper/cluster_clickhouse/data

mkdir -p /opt/zookeeper/cluster_clickhouse/log

5.3 安装zookeeper,编辑配置文件

tar -xvf apache-zookeeper-3.7.1-bin.tar.gz

mv apache-zookeeper-3.7.1-bin /opt/zookeeper/zookeeper-3.7.1

根据clickhouse官方推荐,调整zookeeper相关参数

cat > /opt/zookeeper/zookeeper-3.7.1/conf/zoo.cfg << EOF

dataDir=/opt/zookeeper/cluster_clickhouse/data/

dataLogDir=/opt/zookeeper/cluster_clickhouse/log/

clientPort=2181

tickTime=2000

initLimit=30000

syncLimit=10

maxClientCnxns=2000

maxSessionTimeout=60000000

autopurge.snapRetainCount=10

autopurge.purgeInterval=1

preAllocSize=131072

snapCount=3000000

server.1=10.82.88.182:2888:3888

server.2=10.82.88.183:2888:3888

server.3=10.82.88.184:2888:3888

EOF

节点ch01执行

echo 1 > /opt/zookeeper/cluster_clickhouse/data/myid

节点ch02执行

echo 2 > /opt/zookeeper/cluster_clickhouse/data/myid

节点ch03执行

echo 3 > /opt/zookeeper/cluster_clickhouse/data/myid

5.4 创建 zookeeper 用户

groupadd zookeeper

useradd -g zookeeper zookeeper

echo "umask 022" >> /home/zookeeper/.bash_profile

echo "xxxx" | passwd --stdin zookeeper

echo "zookeeper  ALL=(ALL)  NOPASSWD: /bin/su - root" >> /etc/sudoers

chown -R zookeeper:zookeeper /opt/zookeeper

5.5 启动zookeeper集群

三台机器分别执行su - zookeeper

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh start

启动完成后查看状态

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh status

应为1个leader,2个follower

集群启停命令

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh start

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh stop

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh restart

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh status

​​​​​​​        ​​​​​​​        

【clickhouse】Centos7部署Clickhouse数据库相关推荐

  1. 大数据之clickhouse安装部署

    一.clickhouse简介 ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(D ...

  2. Clickhouse单机部署以及从mysql增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,我也搞不定,那只能找我能搞定的技术 ...

  3. clickhouse doris 实时OLAP数据库的对比与选型

    背景介绍 ClickHouse 是俄罗斯的搜索公司 Yandex 开源的 MPP 架构的分析引擎,号称比事务数据库快 100-1000 倍,团队有计算机体系结构的大牛,最大的特色是高性能的向量化执行引 ...

  4. 第02期:ClickHouse 单机部署以及从 MySQL 增量同步数据

    本期作者:邓亚运 37 互娱高级 DBA,负责公司 MySQL,Redis,Hadoop,Clickhouse 集群的管理和维护. 背景 随着数据量的上升,OLAP 一直是被讨论的话题,虽然 drui ...

  5. clickhouse 列式存储数据库介绍

    ClickHouse介绍 ClickHouse来自哪里? 俄罗斯最大的搜索公司Yandex,在clickhouse的配置文件中我们也会看到yandex的影子. ClickHouse是什么? Click ...

  6. ClickHouse安装部署流程(tgz版)

    这里写自定义目录标题 ClickHouse安装包地址 安装 部署 ClickHouse安装包地址 http://repo.yandex.ru/clickhouse/ 因为我们使用tgz包进行安装,所以 ...

  7. Centos7下安装部署oracle数据库方法及问题汇总

    目标:在centos7上配置oracle数据库服务器,并在win7上面使用pl/sql成功访问该oracle数据库 系统环境: 服务器:centos7 64位 客户端:win7 64位 注意cneto ...

  8. 1 ClickHouse 安装部署(tgz)

    1 下载离线安装包 到官网 https://packages.clickhouse.com/tgz/stable/ 查看最新的安装包版本 , https://packages.clickhouse.c ...

  9. win10本地安装部署ClickHouse

    ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行. 目前在win10系统上面运行,需要安装win1 ...

最新文章

  1. springboot+shiro+cas实现单点登录之shiro端搭建
  2. linux mysql 密码文件怎么打开文件,Oracle数据库密码文件创建与使用
  3. java中 构造器与void
  4. pyqt5的runJavaScript 使用模板
  5. java的mwcellarray_Java 数组
  6. JS SDK的标准创建原则
  7. JQuery Form AjaxSubmit(options)在Asp.net中的应用注意事项
  8. 软件测试工程师面试-常见的python笔试题(一)
  9. 502 Bad Gateway The proxy server received an invalid response from an upstream server
  10. hightopo学习笔记---入门
  11. 电脑服务器地址能修改吗,电脑ip地址可以随便改吗
  12. [产品]博客文章被企业群组收录的方法
  13. MyBatis框架学习笔记01:初入MyBatis(一)
  14. 电商快递电子面单对接使用方法
  15. <金屋藏书>app 技术支持
  16. PCL——点云特征描述与提取
  17. git did not exit cleanly
  18. 记安装win10和deepin双系统的经过(附一些常见问题和解决方案)
  19. [内附完整源码和文档] 基于JSP的网上订餐系统
  20. Docker---docker安全加固之安全隔离

热门文章

  1. 说说短线,交易模型与交易系统
  2. H5调用讯飞语音接口实现在线语音听写测评
  3. 樱桃键盘驱动在哪下_想买键盘有什么好的推荐,打字舒服,不会太大,易便携。?...
  4. Java与C、C++的10大区别-总结
  5. 一卡易:构建最具移动消费属性的微信会员管理营销平台
  6. 《Win7设备驱动程序开发》学习笔记
  7. Android使用自定义View来实现K线图、分时图
  8. 昨天又开始听到学校的铃声了。。。
  9. 移动端web设计尺寸_移动端H5页面的设计稿尺寸(上)
  10. 线和面的方程区别_[平面与圆柱面交线方程]平面与圆柱面的交线有哪三种情况...