这是一篇来自咱们的技术合做伙伴,SequoiaDB巨杉数据库的博客。做者是SequoiaDB的联合创始人和CTO王涛先生,SequoiaDB是一款JSON文档型的事务型数据库。王涛带着技术上非凡的远见,带领SequoiaDB的团队取得了许多技术上的突破和成功。html
SequoiaDB是一款NoSQL数据库,其能够在不一样的物理节点之间对数据进行复制,而且容许用户指定使用哪个数据备份。SequoiaDB容许在同一集群同时运行数据分析和数据操做负载,而且保证最小的I/O和CPU使用率。git
Apache Spark和SequoiaDB的联合解决方案,使得用户能够搭建一个在同一个物理集群中支持多种类型负载(如,SQL语句和流处理)的统一平台。github
Spark-SequoiaDB Connector是Spark的数据源,可让用户可以使用SparkSQL对SequoiaDB的数据库集合中的数据进行读写。链接器用于SequoiaDB与Spark的集成,将无模式的存储模型、动态索引以及Spark集群的优点有机的结合起来。sql
Spark与SequoiaDB能够在同一个物理环境中安装,也能够安装在不一样的集群中。Spark-SequoiaDB Connector将查询的条件下压至SequoiaDB,获取符合查询条件的记录。这一优化使得对操做型数据源的分析无需在SequoiaDB和Spark之间再使用ETL。数据库
如下是部分示例代码,有关如何在Spark-SequoiaDB 链接器中使用SparkSQL:apache
scala> sqlContext.sql("CREATE temporary table org_department ( deptno string, deptname string, mgrno string, admrdept string, location string ) using com.sequoiadb.spark OPTIONS ( host 'host-60-0-16-2:50000', collectionspace 'org', collection 'department', username 'sdb_reader', password 'sdb_reader_pwd')") res2: org.apache.spark.sql.DataFrame = [] scala> sqlContext.sql("CREATE temporary table org_employee ( empno int, firstnme string, midinit string, lastname string, workdept string, phoneno string, hiredate date, job string, edlevel int, sex string, birthdate date, salary int, bonus int, comm int ) using com.sequoiadb.spark OPTIONS ( host 'host-60-0-16-2:50000', collectionspace 'org', collection 'employee', username 'sdb_reader', password 'sdb_reader_pwd')") res3: org.apache.spark.sql.DataFrame = [] scala> sqlContext.sql("select * from org_department a, org_employee b where a.deptno='D11'").collect().take(3).foreach(println) [D11,MANUFACTURING SYSTEMS,000060,D01,null,10,CHRISTINE,I,HAAS,A00,3978,null,PRES ,18,F,null,152750,1000,4220] [D11,MANUFACTURING SYSTEMS,000060,D01,null,20,MICHAEL,L,THOMPSON,B01,3476,null,MANAGER ,18,M,null,94250,800,3300] [D11,MANUFACTURING SYSTEMS,000060,D01,null,30,SALLY,A,KWAN,C01,4738,null,MANAGER ,20,F,null,98250,800,3060] …
Spark+SequoiaDB的联合解决方案帮助企业从数据中发现和获取更多价值。咱们也举一些金融行业应用的例子,某银行使用了SequoiaDB+Spark的方案做为其新的交易历史信息存储系统。优化
在过去的数十年中,大部分银行都一直使用大型机做为其核心的银行业务系统支持。大型机的技术局限性使得超过一年以前的历史交易数据就须要从大型机上移出而转存在其余的磁盘(磁带)中进行保存。spa
然而,现在,由于移动互联网和网上银行的兴起,银行用户对于服务的要求大大的超过了从前,这也带来了更多的需求。为了让客户更好的体验银行的服务,让产品服务更有竞争力,各大银行也开始推出让客户能快速的查询历史记录(包括1年之前的历史记录)等多项改进的服务。scala
经过使用SequoiaDB,该银行在数据库的50个物理节点,使用近1PB的空间,存储了全部用户长达15年的历史数据。这一新系统让用户能够轻松的获取其全部的交易历史,不管展示在移动客户端或者网页端。日志
在以前的案例中,咱们已经将全部的用户历史交易数据都存储在了数据库当中,基于这些历史交易信息,咱们也能够经过对这些数据的分析,对每一个用户的交易行为进行预测,对用户进行分类和建模,最终根据分析的结果向每一个用户推荐最适合的理财产品。
当用户模型系统经过分析全部的历史数据和日志,计算出须要推荐的产品时,这些用户特征也会做为这个用户的一个标签写入这个用户的信息中。这些新加入的用户标签,能够帮助前台的员工和产品推荐系统快速的分辨出每一个顾客的兴趣和消费倾向。部署了这套系统后,该行的金融产品的推荐成功率提高了10倍以上。
在实际合做中,咱们发现咱们不少的金融行业用户都有兴趣使用流处理(反洗钱和高频交易),也有很大兴趣在于交互式SQL处理(政府的监管系统)。咱们计划进一步对SequoiaDB的Spark组件增长功能和提高稳定性,好比使得SparkSQL能支持标准的SQL2003.