【IT168 评论】MemSQL诞生时最大的标签便是其号称是“世界上最快的分布式关系型数据库”。MemSQL也是继SAP、Oracle、IBM、微软之后第5家同时进入Gartner分析型和操作型数据库魔力象限的公司。这在当时引起不小骚动。根据Gartner发布的2016年数据仓库和数据管理解决方案关键能力报告,MemSQL位列操作系统数据仓库用例榜首,这在很大程度上基于其对连续数据加载和操作型BI查询用例的贡献。
即便如此,话题之外的MemSQL可能并没有多少人了解,这点单从少得可怜的百度百科词条就看得出来。MemSQL结合基于磁盘的列存储分析,为使用案例提供了一个内存中的数据库管理系统。但大部分MemSQL客户没有足够的经验应对升级或版本迁移带来的困难,因为它太新了。今天,小编就与大家分享一个关于MemSQL的案例。
前段时间的美国总统大选辩论几乎是本月最值得关注的一件事了,更有好事之徒将辩论截图做成了各种表情包,在微博上广为流传。MemSQL通过对Twitter上有关的评论转发等内容进行实时分析,最后给出了两位演讲者的情绪变化过程。MemSQL如何实现的呢?
首先,写一个Python脚本用来收集Twitter平台上所有包含“Hillary”、“hillary”、“Trump”、“trump”单词的内容,使用Hillary和Trump作为该内容的描述标签。之后,该脚本会将这些内容实时送到Apache Kafka队列中,然后在经过MemSQL管道。具体的步骤如下所示:
创建管道:
CREATEPIPELINE`twitter_pipeline`
ASLOAD DATAKAFKA‘your-kafka-host-ip:9092/your-kafka-topic’
INTOTABLE`tweets`
创建表CREAT TABLE:
CREATE TABLE`tweets`(
`id`bigint(20)DEFAULTNULL,
`ts`timestamp NOTNULLDEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`tweet`JSON COLLATE utf8_bin,
`text`astweet::$text PERSISTED text CHARACTER SET utf8 COLLATE utf8_general_ci,
`retweet_count`astweet::%retweet_count PERSISTED int(11),
`candidate`asCASE
WHEN(text LIKE'%illary%')THEN'Clinton'
WHEN(text LIKE'%rump%')THEN'Trump'
ELSE'Unknown'ENDPERSISTED text CHARACTER SET utf8 COLLATE utf8_general_ci,
`created`asFROM_UNIXTIME(`tweet`::$created_at)PERSISTED datetime,
KEY`id`(`id`)/*!90619 USING CLUSTERED COLUMNSTORE */,
/*!90618 SHARD */KEY`id_2`(`id`)
注意:创建tweet作为columnstore表,因此它可以用于大数据分析,我们也可以利用MemSQL的持久化计算列解析JSON数据,MemSQL本机支持JSON数据格式。
运行twitter_pipeline时,tweet中的数据如下所示:
memsql>SELECT *from tweets LIMIT1\G
***************************1.row ***************************
id:786409507039485952
ts:2016-10-1303:33:53
tweet: {"created_at":1476329611,"favorite_count":0,"id":
786409507039485952,"retweet_count":0,"text":
"RT @BlackWomen4Bern: This will be an interesting Halloween this year...expect me to tweet some epic Hillary costumes...I expect there will…","username":"hankandmya12"}
text:RT@BlackWomen4Bern:Thiswill be an interesting Halloween thisyear...expect me totweet some epic Hillary costumes...Iexpect there will…
retweet_count:0
candidate:Clinton
created:2016-10-1303:33:31
1row inset(0.03sec)
接下来,创建第二个管道,还是来自同样的Kafka,但不直接存储在表中,利用Python自然语言包,实时分析情绪变化。
创建第二个管道:
CREATE PIPELINE`twitter_sentiment_pipeline`
ASLOAD DATA KAFKA'your-kafka-host-ip:9092/your-kafka-topic'
WITH TRANSFORM('http://download.memsql.com/pipelines-twitter-demo/transform.tar.gz','transform.py','')
INTO TABLE`tweet_sentiment`
将两个MemSQL管道的数据结合,利用SQL执行分析。例如,可以创建一个统计直方图反映情绪变化,语句如下:
SELECT
sentiment_bucket,
SUM(IF(candidate="Clinton",tweet_volume,0))asclinton_tweets,
SUM(IF(candidate="Trump",tweet_volume,0))astrump_tweets
FROM tweets_per_sentiment_per_candidate_timeseriest
GROUP BY sentiment_bucket
ORDER BY sentiment_bucket;
最后,构造一个UI。使用WebSockets React可视化候选人的情绪,实时绘制图表,如下所示:
看完这个小案例,有木有开启对MemSQL的新认知呢。看起来,两位候选人的情绪波动半斤八两啊!除了速度快,MemSQL很大的一个优势就是可以与MySQL结合。当磁盘中MySQL数据需要更少的性能和更高的持久性时,MemSQL则扮演一个高性能内存层的角色。MemSQL使用一个SQL接口和MySQL API,这意味着开发者不必学习新的东西。 这意味着开发者很容易上手,有兴趣的不妨尝试一下吧。