公司/行业内正在追求最好的信息运用手腕来晋升他们的营业才能。大量的数据以分歧的方式敏捷发生着,如生产数据库,交易的汗青,网站的流量日记,在线视频,社交媒体的互动等等。在2001年,Doug Laney首创了“volume、velocity和variety”的三大约念。
Volume - 指宏大的数据
Velocity - 指数据发生的速度
Variety - 指数据的类型
在过来的十年中,IT数据呈指数增加。我们生涯在信息时期。以电子方式存储数据总量已难以丈量,但IDC估量的“数字天下”在2006年为0.18ZT,并猜测了2011年将有十倍的增加到1.8ZT。行业内也有异样的预期:
跟着数据的疾速增加,贮存(1GB)盘的本钱也改变直下。下面是1980年来的行业数据统计。Start时为二百万,如今减少到10美分。
大数据协助开发组织无缝地适应了当代科技的观点
高可用性
处置大范围数据
毛病恢复
高度散布性
在技术反动的前沿,企业更存眷的是契合它们状况的需求。跟着数据的增加从8到8KE比特,和硬盘的本钱破费从二百万到2美分的需求,营业被驱动施行大数据技术。
下面是曾经施行的四种分歧的数据模子。
1. 按列形状或长列存储类型
2. 以文档方式存储
3. 键值对的存储
4. 图形数据存储
1. 以列形状或长列存储类型
例子: Cassandra, HBase
典范使用 : 分布式数据存储
以列形状存储的类型根本上是最典范的键/值对存储的拓展,并供给两个级此外嵌套。嵌套的键/值对被称为以列形状存储中的列。每列都可以按一个键值分组,从而可以供给超等列的功用。其典范的运用状况是有着大量的读/写操作的使用。
2. 文档方式存储
例子: CouchDB, MongoDBv
典范使用 : Web使用
基于文档的数据模子经常使用来存储或恢复面向文档或半构造化的信息,这在基于web的使用中很常用。凡是,如今一切的基于文件的数据模子遵照XML、JSON或BSON等模子,它们可以与数据模子简略单纯的映照。与数据库交互简练的API也使得如今的惯例言语都添加了对其的内建支撑。
3. 键值对存储
例子: Membase, Redis
典范一个月: 分布式哈希表,缓存
键值对存储就如典范的哈希表,它按键来存储值。这类存储答应不那末严格的形式。其典范使用场景是读操作比写操作多很多时。比方说,我们要要在论坛上每2分钟更新显示最新的职位,这意味着在后台每2分钟运转一次Task并将后果贮存为键值对,然后从贮存的键值对中读数据。很多内容麋集型的网站运用内存型的键/值对存储系统。
4. 图型数据库
例子: Neo4J、InfoGrid
典范使用: 社交收集、引荐系统
图型数据模子凡是遵照图型算法来存储数据的节点和边沿。当我们面临递归数据模子时图形数据库是最合适的。每一个节点都可能具有下级属性节点及属性关系(边沿)
下面是问题,怎么运用大数据Cassandra存储来说明怎么构建.NET使用。这里,我们将实行一个容易的收益盘算,我们将运用运用2个交易系统——Debit、Credit,和2个参考系统——Customer、ForexRate。
关于给定的问题,使用顺序将运用的关系型数据存储来开发。关系数据库模子是由Edgar F. Codd在1969年底起首提出的。关系数据模子的根本假定是数据可以数学的表现为一个1对n的关系,便可以以为是笛卡尔积的子集。数据可以经过运用聚集实际拜访,一致性可以经过使用主键和外键关系束缚的代数拜访办法来完成。
在现今的数据天下中,传统的数据存储办法更不上产业数据增加的范围。
这恰是本文将会商的,怎么运用大数据Cassandra后端而不是运用传统计划来构建.NET使用。针对这一问题,本文将着手从架构设计不断到.NET的完成代码。
架构
根底设备
由于散布在一个三层架构中,根底设备包括展现,营业和存储(Cassandra)层。具有高度可用的对等集群模子的长处,Cassandra层用两个节点集群构建。
营业和存储层运用被称为CassandraSharp的大数据Cassandra衔接器衔接。你可以经过GitHub的项目了解更多的关于CassandraSharp的信息。
逻辑
逻辑架构定义了供给给营业需求的活动和功用的流程。逻辑架构是自力于技术和完成的。
在我们的Task中,我们的功用被细分为六大类。把持台登录(Console Landing)是输出层,把持台后果(Console Result)是输出层。全局数据容器(Global data container)是贯串全部使用的数据持有者。关键功用包括了剩下的三个区域:加载器(Loader),营业引擎(BusinessEngine)和数据拜访(DataAccess)。
加载器模块在流程初始化(AppInit)时期加载营业,参考和营业规矩。营业引擎依据输出在营业层选择盘算的规矩。数据拜访位于数据衔接层用于读取和存储Cassandra中的信息。
数据
给定的问题描绘,处置两个事物数据和两个援用数据。他们辨别被标志为 Debit,Credit ,Customer,ForexRate。以下图所示:
完成
给定的问题描绘,我们掩盖了目的和根底设备、逻辑和数据架构。让我们用.NET编程并用Cassandra作为数据存储来完成这个需求。
Cassandra查询
因为我们将 Cassandra作为存储, Cassandra表(列族)依照我们的数据模子在后台被创立。实践的创立 Cassandra表(列族)的CQL( Cassandra查询言语)以下:
CREATE TABLE Debit ( Trans_id int PRIMARY KEY, Customer_id int, Trans_amount varchar, Trans_date varchar ) CREATE TABLE Customer ( Customer_id int PRIMARY KEY, Name varchar, Location varchar )
我们晓得 ADO.NET经过 SQL Server 和 XML供给数据耐久化服务, 并经过 OLE DB 和 ODBC来操作数据. 所以, ADO.NET将数据操作分片划分. ADO.NET 包含.NET 框架数据供给衔接数据库,履行号令和获得数据的操作.
相似的 Cassandra也能够经过 CassandraSharp衔接. 这是Apache Cassandra 一个高功能 .NET 驱动. 在CassandraSharp定名空间里有 ClusterManager, TransportConfig, ClusterConfig, BehaviourConfig, 等等. 可以从Github https://github.com/pchalamet/cassandra-sharp 检查
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Apache.Cassandra; using CassandraSharp; using CassandraSharp.Config; namespace DataAccess { public abstract class BaseDataAccess : IDisposable { private string[] myClusters; private int myPort; public BaseDataAccess(string[] clusters, int port) { myClusters = clusters; myPort = port; } protected ICluster GetCluster() { CassandraSharpConfig config = new CassandraSharpConfig(); ClusterConfig clusterConfig = new ClusterConfig(); TransportConfig transConfig = new TransportConfig(); clusterConfig.Name = "TestCassandra"; transConfig.Port = myPort; clusterConfig.Transport = new TransportConfig(); EndpointsConfig endPointConfig = new EndpointsConfig(); endPointConfig.Servers = myClusters; endPointConfig.Snitch = SnitchType.Simple; endPointConfig.Strategy = EndpointStrategy.Nearest; BehaviorConfig behaveConfig = new BehaviorConfig(); behaveConfig.KeySpace = ConfigEntries.DefaultDatabase; if (!String.IsNullOrWhiteSpace(ConfigEntries.UserName)) behaveConfig.User = ConfigEntries.UserName; if (!String.IsNullOrWhiteSpace(ConfigEntries.Password)) behaveConfig.Password = ConfigEntries.Password; behaveConfig.ReadConsistencyLevel = Apache.Cassandra.ConsistencyLevel.ONE; behaveConfig.WriteConsistencyLevel = Apache.Cassandra.ConsistencyLevel.ONE; clusterConfig.Transport = transConfig; clusterConfig.Endpoints = endPointConfig; clusterConfig.BehaviorConfig = behaveConfig; config.Clusters = new ClusterConfig[] { clusterConfig }; //We need to ensure that the connection is not initialized before configuring... ClusterManager.Shutdown(); ClusterManager.Configure(config); ICluster cluster = ClusterManager.GetCluster("TestCassandra"); return cluster; } protected DataTable ConvertCqlResultToDataTable(CqlResult result, string tableName) { DataCommon common = new DataCommon(); DataTable store = common.GetSchema(result, tableName); return PopulateData(result, common, store); } private DataTable PopulateData(CqlResult result, DataCommon common, DataTable store) { string columnName = string.Empty; foreach (CqlRow row in result.Rows) { DataRow dataRow = store.NewRow(); foreach (Column column in row.Columns) { columnName = common.GetValue<string>(column.Name); dataRow[columnName] = common.GetValue(store.Columns[columnName], column.Value); } store.Rows.Add(dataRow); } return store; } public void Dispose() { ClusterManager.Shutdown(); } } }
在DataAccess 工具里, GetCluster办法从设置装备摆设文件获得Cassandra cluster . 其包括了Cluster的各类具体信息,比方Server地址, 用户名密码, 耐久化级别, Endpoint 战略, 等.
我们需求泛型办法来从Cassandra 指定的 DataTable失掉数据. ConvertCqlResultToDataTable办法就是完成了这一需求.
PopulateData 是前一个办法的外部办法. PopulateData经过meta data读取 Cassandra Table表的数据; 将后果前往为 DataTable 型.
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务