Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何在Ubuntu 14.04上安装MemSQL

如何在Ubuntu 14.04上安装MemSQL

原创
作者头像
尘埃
修改于 2018-10-09 09:31:19
修改于 2018-10-09 09:31:19
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

MemSQL是一种内存数据库,可以提供比传统数据库更快的读写操作。即使它是一项新技术,它也会说MySQL协议,因此使用起来非常熟悉。

MemSQL已经采用了MySQL的最新功能和现代功能,例如JSON支持和数据插入功能。MemSQL over MySQL的最大优势之一是它能够跨多个节点拆分单个查询,称为大规模并行处理,从而实现更快的读取查询。

在本教程中,我们将在单个Ubuntu 14.04服务器上安装MemSQL,运行性能基准测试,并通过命令行MySQL客户端插入JSON数据。

先决条件

要学习本教程,您需要:

  • 一个Ubuntu 14.04 x64 腾讯CVM,至少8 GB RAM,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 具有sudo权限的非root用户。

-

第1步 - 安装MemSQL

在本节中,我们将为MemSQL安装准备工作环境。

最新版本的MemSQL列在其下载页面上。我们将下载并安装MemSQL Ops,这是一个管理下载和准备服务器以正确运行MemSQL的程序。在编写本文时,最新版本的MemSQL Ops是4.0.35。

首先,从他们的网站下载MemSQL的安装包文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget http://download.memsql.com/memsql-ops-4.0.35/memsql-ops-4.0.35.tar.gz

接下来,提取包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xzf memsql-ops-4.0.35.tar.gz

提取包已创建一个名为memsql-ops-4.0.35的文件夹。请注意,文件夹名称具有版本号,因此如果您下载的版本低于本教程指定的版本,您将拥有一个包含所下载版本的文件夹。

将目录更改为此文件夹。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd memsql-ops-4.0.35

然后,运行安装脚本,它是我们刚刚提取的安装包的一部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo ./install.sh

您将看到脚本的一些输出。片刻之后,它会询问您是否只想在此主机上安装MemSQL。我们将在未来的教程中介绍如何在多台机器上安装MemSQL。所以,为了本教程的目的,让我们输入y来表示肯定。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. . .
Do you want to install MemSQL on this host only? [y/N] y
​
2015-09-04 14:30:38: Jd0af3b [INFO] Deploying MemSQL to 45.55.146.81:3306
2015-09-04 14:30:38: J4e047f [INFO] Deploying MemSQL to 45.55.146.81:3307
2015-09-04 14:30:48: J4e047f [INFO] Downloading MemSQL: 100.00%
2015-09-04 14:30:48: J4e047f [INFO] Installing MemSQL
2015-09-04 14:30:49: Jd0af3b [INFO] Downloading MemSQL: 100.00%
2015-09-04 14:30:49: Jd0af3b [INFO] Installing MemSQL
2015-09-04 14:31:01: J4e047f [INFO] Finishing MemSQL Install
2015-09-04 14:31:03: Jd0af3b [INFO] Finishing MemSQL Install
Waiting for MemSQL to start...

现在您已将一个MemSQL集群部署到您的Ubuntu服务器上!但是,从上面的日志中,您会注意到MemSQL已安装两次。

MemSQL可以作为两个不同的角色运行:聚合器节点和叶子节点。之前安装MemSQL的原因是因为它需要至少一个聚合器节点和至少一个叶节点才能运行集群。

聚合器是你的界面MemSQL。对于外部世界,它看起来很像MySQL:它在同一个端口上侦听,你可以连接期望与MySQL和标准MySQL库交谈的工具。聚合器的工作是了解所有MemSQL叶节点,处理MySQL客户端,并将其查询转换为MemSQL。

叶节点实际存储的数据。当叶节点从聚合器节点接收到读取或写入数据的请求时,它执行该查询并将结果返回到聚合器节点。MemSQL允许您跨多个主机共享数据,每个叶节点都有一部分数据。(即使使用单个叶节点,您的数据也会在该叶节点内拆分。)

当您有多个叶节点时,聚合器负责将MySQL查询转换为该查询中应该涉及的所有叶节点。然后它接收来自所有叶节点的响应,并将结果聚合到一个返回MySQL客户端的查询中。这就是管理并行查询的方式。

我们的单主机设置在同一台机器上运行聚合器和叶节点,但您可以在许多其他机器上添加更多叶节点。

第2步 - 运行基准

让我们看看MemSQL可以通过使用MemSQL Ops工具来快速运行,该工具是作为MemSQL安装脚本的一部分安装的。

在您的Web浏览器中,转到 http://your_server_ip:9000

MemSQL Ops工具为您提供了群集的概述。我们有2个MemSQL节点:主聚合器和叶节点。

让我们在单机MemSQL节点上进行速度测试。单击左侧菜单中的Speed Test,然后单击START TEST。以下是您可能会看到的结果示例:

我们将不介绍如何在本教程中跨多个服务器安装MemSQL,但为了进行比较,这里是一个带有三个8GB Ubuntu 14.04节点(一个聚合器节点和两个叶节点)的MemSQL集群的基准测试:

通过将叶节点的数量加倍,我们几乎可以使插入速率加倍。通过查看Rows Read部分,我们可以看到我们的三节点集群能够在相同的时间内同时读取比单节点集群多12M的行。

第3步 - 通过mysql-client与MemSQL交互

对于客户端,MemSQL看起来像MySQL; 他们都有着同样的协议。为了要开始与我们的MemSQL集群交谈,让我们先安装一个mysql-client。

首先,更新apt,以便我们在下一步安装最新的客户端。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update

现在,安装一个MySQL客户端。这将给我们一个mysql执行命令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install mysql-client-core-5.6

我们现在准备使用MySQL客户端连接到MemSQL。我们将以root用户身份连接到端口3306上的127.0.0.1主机(这是我们的本地主机IP地址)。我们还将把提示消息自定义为memsql>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql -u root -h 127.0.0.1 -P 3306 --prompt="memsql> "

你会看到几行输出的后面写着memsql>提示符。

我们列出数据库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show databases;

你会看到这个输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+--------------------+
| Database           |
+--------------------+
| information_schema |
| memsql             |
| sharding           |
+--------------------+
3 rows in set (0.01 sec)

创建一个名为tutorial的新数据库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create database tutorial;

然后使用use命令来切换至使用新数据库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use tutorial;

接下来,我们将创建一个users表,该表将有id字段和email字段。我们必须为这两个字段指定一个类型。让我们将id设为bigint并通过电子邮件发送长度为255的varchar。我们还将告诉数据库该id字段是主键,并且该email字段不能为空。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table users (id bigint auto_increment primary key, email varchar(255) not null);

你可能会注意到最后一个命令的执行时间很短(15 - 20秒)。MemSQL创建这个新表的速度有一个主要原因:代码生成。

在引擎盖下,MemSQL使用代码生成来执行查询。这意味着每当遇到新类型的查询时,MemSQL都需要生成和编译代表查询的代码。然后将此代码发送到集群以供执行。这加快了处理实际数据的速度,但是准备成本很高。MemSQL尽其所能重用预先生成的查询,但是从未见过结构的新查询将会减速。

回到我们的用户表,看一下表定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe users;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------+--------------+------+------+---------+----------------+
| Field | Type         | Null | Key  | Default | Extra          |
+-------+--------------+------+------+---------+----------------+
| id    | bigint(20)   | NO   | PRI  | NULL    | auto_increment |
| email | varchar(255) | NO   |      | NULL    |                |
+-------+--------------+------+------+---------+----------------+
2 rows in set (0.00 sec)

现在,让我们在users表中插入一些示例电子邮件。此语法与我们可能用于MySQL数据库的语法相同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert into users (email) values ('one@example.com'), ('two@example.com'), ('three@example.com');
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Query OK, 3 rows affected (1.57 sec)
Records: 3  Duplicates: 0  Warnings: 0

现在查询users表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from users;

您可以看到我们刚刚输入的数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----+-------------------+
| id | email             |
+----+-------------------+
|  2 | two@example.com   |
|  1 | one@example.com   |
|  3 | three@example.com |
+----+-------------------+
3 rows in set (0.07 sec)

第4步 - 插入和查询JSON

MemSQL提供了JSON类型,因此在此步骤中,我们将创建一个事件表来使用传入事件。该表将包含一个id字段(就像我们为用户所做的那样)和一个event字段,该字段将是一个JSON类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table events (id bigint auto_increment primary key, event json not null);

让我们插入几个事件。在JSON中,我们将引用一个email字段,该字段又引用回到我们在步骤3中插入的用户的ID。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert into events (event) values ('{"name": "sent email", "email": "one@example.com"}'), ('{"name": "received email", "email": "two@example.com"}');

现在我们可以看看刚刚插入的事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from events;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----+-----------------------------------------------------+
| id | event                                               |
+----+-----------------------------------------------------+
|  2 | {"email":"two@example.com","name":"received email"} |
|  1 | {"email":"one@example.com","name":"sent email"}     |
+----+-----------------------------------------------------+
2 rows in set (3.46 sec)

接下来,我们可以查询其JSON name属性是文本“已接收电子邮件”的所有事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from events where event::$name = 'received email';
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----+-----------------------------------------------------+
| id | event                                               |
+----+-----------------------------------------------------+
|  2 | {"email":"two@example.com","name":"received email"} |
+----+-----------------------------------------------------+
1 row in set (5.84 sec)

尝试更改该查询以查找name属性为“已发送电子邮件”文本的查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from events where event::$name = 'sent email';
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----+-------------------------------------------------+
| id | event                                           |
+----+-------------------------------------------------+
|  1 | {"email":"one@example.com","name":"sent email"} |
+----+-------------------------------------------------+
1 row in set (0.00 sec)

这个最新的查询比前一个查询运行得快得多。这是因为我们只更改了查询中的参数,因此MemSQL能够跳过代码生成。

让我们为分布式SQL数据库做一些高级操作:让我们在非主键上连接两个表,其中一个连接值嵌套在一个JSON值中,但过滤不同的JSON值。

首先,我们将通过匹配事件名称为“已接收电子邮件”的电子邮件来请求加入事件表的用户表的所有字段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from users left join events on users.email = events.event::$email where events.event::$name = 'received email';
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----+-----------------+------+-----------------------------------------------------+
| id | email           | id   | event                                               |
+----+-----------------+------+-----------------------------------------------------+
|  2 | two@example.com |    2 | {"email":"two@example.com","name":"received email"} |
+----+-----------------+------+-----------------------------------------------------+
1 row in set (14.19 sec)

接下来,尝试相同的查询,但只过滤到“已发送电子邮件”事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from users left join events on users.email = events.event::$email where events.event::$name = 'sent email';
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----+-----------------+------+-------------------------------------------------+
| id | email           | id   | event                                           |
+----+-----------------+------+-------------------------------------------------+
|  1 | one@example.com |    1 | {"email":"one@example.com","name":"sent email"} |
+----+-----------------+------+-------------------------------------------------+
1 row in set (0.01 sec)

像以前一样,第二个查询比第一个快得多。正如我们在基准测试中看到的那样,在执行数百万行时,代码生成的好处得到了回报。使用能够理解JSON的横向扩展SQL数据库以及如何在表之间任意连接的灵活性是一个强大的用户功能。

结论

您已经安装了MemSQL,运行节点性能的基准测试,通过标准MySQL客户端与您的节点进行交互,并使用MySQL中没有的一些高级功能。这应该很好地了解内存中的SQL数据库可以为您做什么。

还有很多东西需要了解MemSQL如何实际分发您的数据,如何构建表以获得最佳性能,如何跨多个节点扩展MemSQL,如何复制数据以实现高可用性以及如何保护MemSQL。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How to Install MemSQL on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在Ubuntu 14.04上安装Solr 5.2.1
Solr是一个基于Apache Lucene的搜索引擎平台。它是用Java编写的,并使用Lucene库来实现索引。可以使用各种REST API访问它,包括XML和JSON。这是他们网站上的功能列表:
穿鞋跑得快
2018/10/10
1.1K0
MySQL binlog event 详解
我也是只菜鸡,blog写的不对或者不严谨的地方还请大伙指出来,我及时改正,免得误人子弟。
保持热爱奔赴山海
2019/09/18
6.2K0
MySQL binlog event 详解
7天快速掌握MySQL-DAY2
最基本的语句,意思是从那张表去查询什么数据列,可以是原表的列,也可以是聚合后的列,可以包含重复列,也可以去重,也可以只查看前几列。
披头
2019/12/26
2.1K0
新闻推荐实战(一):MySQL基础
本文属于新闻推荐实战—数据层—构建物料池之MySQL。MySQL数据库在该项目中会用来存储结构化的数据(用户、新闻特征),作为算法工程师需要了解常用的MySQL语法(比如增删改查,排序等),因为在实际的工作经常会用来统计相关数据或者抽取相关特征。本着这个目的,本文对MySQL常见的语法及Python操作MySQL进行了总结,方便大家快速了解。文末附上参考资料
用户9656380
2022/04/14
2.2K0
新闻推荐实战(一):MySQL基础
MySQL数据库3分组与单表、多表查询
select * from 表名 where 列名 in (值1,值2,。。。);
GH
2019/12/16
6.6K0
MySQL数据库3分组与单表、多表查询
如何在Ubuntu 14.04上使用Rsyslog,Logstash和Elasticsearch集中日志
了解组织生成的数百万条日志行是一项艰巨的挑战。一方面,这些日志行提供了应用程序性能,服务器性能指标和安全性的视图。另一方面,日志管理和分析可能非常耗时,这可能会妨碍采用这些日益必要的服务。
八十岁的背影
2018/09/20
2.4K0
python【第十二篇】Mysql基础
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。 所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 RDBMS即关系数据库管理系统(Relational Database Management System)的特点: (1)数据以表格的形式出现 (2)每行为各种记录名称 (3)每列为记录名称所对应的数据域 (4)许多的行和列组成一张表单 (5)若干的表单组成database
用户1432189
2018/09/05
9560
python【第十二篇】Mysql基础
如何在Ubuntu 14.04上安装和使用BaasBox
BaasBox是一个充当数据库服务器和应用程序服务器的应用程序。开箱即用,BaasBox通过备份提供用户注册,用户管理,角色管理,内容管理,文件管理和数据库管理功能。由于所有这些功能都是通过标准HTTP REST API公开的,因此Web和移动应用程序的开发人员可以使用BaasBox作为后端来存储数据。开发人员还可以创建基于BaasBox的微服务,这些服务由其应用程序的其他部分使用。
心语花束
2018/09/29
1.2K0
Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一、初步了解binlog MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。 ---------
洗尽了浮华
2018/01/22
3K0
Server 层混杂信息字典表 | 全方位认识 information_schema(中)
该表提供查询关于语句性能分析的信息。其记录内容对应于SHOW PROFILES和SHOW PROFILE语句产生的信息
老叶茶馆
2020/11/26
4100
运维实践|浅谈mysql系统库
前几篇多多少少学习了一些MySQL相关的知识,例如安装、配置、字符集等,本篇想要介绍下安装好的MySQL有哪些数据库。了解MySQL的内置库对于数据库管理员和开发者来说是非常重要的,它们提供了丰富的功能和工具,有助于更好地管理和优化数据库。
六月暴雪飞梨花
2024/03/31
2370
运维实践|浅谈mysql系统库
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
半结构化数据是一种灵活多变的数据形式,不受固定结构限制,无需事先定义固定的表结构,为数据存储和分析提供了强大的灵活性及便捷性。常见的半结构化数据包括 XML、JSON、日志文件等。半结构化数据被广泛应用于以下场景:
SelectDB技术团队
2024/03/14
4600
复制状态与变量记录表 | performance_schema全方位介绍
不知不觉中,performance_schema系列快要接近尾声了,今天将带领大家一起踏上系列第六篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中的复制状态与变量统计表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧~
沃趣科技
2018/07/02
3.2K0
复制状态与变量记录表 | performance_schema全方位介绍
如何在Ubuntu 14.04上安装和配置OrientDB
OrientDB是一个多模型NoSQL数据库,支持图形和文档数据库。它是一个Java应用程序,可以在任何操作系统上运行。它也完全支持ACID,支持多主复制。
谢鸢
2018/09/29
1K0
捅破窗户纸-入门MySQL调优之性能监控
MySQL Server的逻辑架构一般分为三层:服务层(专门为客户端服务)、MySQL Server核心层和存储引擎。
行百里er
2020/12/02
1.1K0
捅破窗户纸-入门MySQL调优之性能监控
应用示例荟萃 | performance_schema全方位介绍(上)
经过前面6个篇幅的学习,相信大家对什么是performance_schema,已经初步形成了一个整体认识,但我想很多同行看完之前的文章之后可能还是一脸懵逼,今天就为大家带来performance_schema系列的最后一个篇章(全系共7个篇章),在这一期里,我们将为大家列举数十个performance_schema应用示例。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
老叶茶馆
2020/11/26
5830
如何在Ubuntu 14.04上安装和配置PostGIS
PostGIS是PostgreSQL关系数据库的空间扩展。PostGIS允许您使用几何和地理数据类型存储空间数据,使用空间函数执行空间查询以确定区域,距离,长度和周长,并在数据上创建空间索引以加速空间查询。
灬半痴
2018/09/28
1.6K0
深入理解Hive【Hive架构介绍、安装配置、Hive语法介绍】
4、底层支持多种不同的执行引擎【MR/Tez/Spark】1.x默认为MR     2.x默认为Spark   当然也可以设置为Tez
Java架构师必看
2021/05/14
3.3K0
深入理解Hive【Hive架构介绍、安装配置、Hive语法介绍】
如何在Ubuntu 14.04上安装和使用ArangoDB
ArangoDB是一个NoSQL数据库。它创建于2011年,当时已有许多NoSQL数据库,其目标是成为一个涵盖各种用例的综合数据库解决方案。
朝朝
2018/09/29
2.7K0
CentOS7系统使用rpm方式安装MySQL5.7
参考:https://blog.csdn.net/wudinaniya/article/details/81094578
别先生
2020/09/01
2.1K0
CentOS7系统使用rpm方式安装MySQL5.7
推荐阅读
相关推荐
如何在Ubuntu 14.04上安装Solr 5.2.1
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档