使用HP Vertica進行.NET程式設計
目錄
一篇關於使用BigData HP Vertica平臺進行.NET資料層程式設計的文章
介紹
繼續我在去年寫的關於Cassandra / .NET程式設計的
本文詳細介紹了三個方面。首先是惠普大資料平臺Vertica及其維度。其次,.NET應用程式層利用HP Vertica資料儲存。最後,.NET程式碼示例用於CRUD(建立讀取更新刪除)資料操作。
資料倉庫
資料倉庫是企業各種業務系統收集的資料的所有或重要部分的中央儲存庫。這個詞是由WH Inmon創造的。
資料倉庫的應用包括資料探勘,Web挖掘和決策支援系統(DSS)。
傳統資料倉庫
傳統上,資料倉庫位於企業主機伺服器上。來自各種線上事務處理(OLTP)應用程式和其他源的資料被選擇性地提取和組織在資料倉庫資料庫上,以供分析應用程式和使用者查詢使用。資料倉庫強調從不同來源捕獲資料,以進行有用的分析和訪問。
最新資料倉庫
在最新的行業趨勢中,資料倉庫不僅使用內部系統而且還通過相關的外部系統構建,以獲得更好的清晰度和粒度。
商業智慧(BI)和資料倉庫的世界不斷髮展。分析資料庫伺服器,大資料,NoSQL,mashup,SaaS BI,資料虛擬化伺服器,高階分析和SOA等技術已經變得可獲得,併為組織提供了新的可能性。
對照
作為詳細分析的結果,傳統倉庫和最新大資料倉庫的比較如下:
HP Vertica
它是什麼?
Vertica Systems是一家分析資料庫管理軟體公司,成立於2005年,於2011年3月被惠普(Hewlett Packard)收購。
基於叢集,面向列的
概念
HP Vertica建立在四個顯著特徵(四個C)的基礎之上:
- 列儲存:儲存資料以優化訪問
- 壓縮:在較少的物理儲存中儲存更多資料
- 群集:無論您需要三個節點還是300個節點,都可以輕鬆擴充套件資料庫
- 持續效能:自動優化資料庫
為什麼選擇Vertica?
作為傳統的資料儲存程式設計師,相當直接的問題。
在現代商業中,可操作的資料變得比以往任何時候都重要。快速有效地管理資料的能力是巨大的競爭優勢——使用Vertica分析平臺可輕鬆實現這一優勢。Vertica是一個功能強大的分析資料庫,允許使用者以快速的速度從大量資料中提取價值。使用上述4C概念可以實現大資料需求。
誰用它?
包括Facebook在內的一些資料巨頭 。Facebook選擇HP Vertica分析平臺作為其大資料基礎架構的一個組成部分。參考連結。
Vertica外部表
藉助最新版本的Vertica,現在可以使用Vertica Analytics Engine及其分析的全部表現力,而無需將資料載入到Vertica中。它如下圖所示。
Microsoft Connectivity
HP Vertica允許您將HP Vertica伺服器與包含以前安裝在系統上的Microsoft元件的環境整合。Connectivity Pack包括ADO.NET客戶端驅動程式以及用於與Microsoft Visual Studio和Microsoft SQL Server整合的其他工具。
HP Vertica的Microsoft Connectivity Pack 允許您將HP Vertica伺服器與包含以前安裝在系統上的Microsoft元件的環境整合。Connectivity Pack包括ADO.NET客戶端驅動程式以及用於與Microsoft Visual Studio和Microsoft SQL Server整合的其他工具。
具體來說,Connectivity Pack是增強的.NET資料提供程式包,並提供與以下Microsoft元件的整合:
- 用於SQL Server 2012的Visual Studio 2008商業智慧開發工具集(BIDS).BIDS是一個基於客戶端的應用程式,用於開發商業智慧解決方案並基於Microsoft Visual Studio開發環境; BIDS包括特定於SQL Server Business Intelligence的其他專案型別。開發人員使用BIDS開發業務解決方案。
- SQL Server資料工具——用於SQL Server 2012的Visual Studio 2010/2012的商業智慧(SSDT-BI).SSDT-BI替換了Visual Studio 2010和2012的BIDS。它與BIDS具有相同的用途,為開發商業智慧解決方案提供了開發環境。
- SQL Server 2008和2012的SQL Server Analysis Services(SSAS)。使用SSAS進行OLAP和資料探勘,使用HP Vertica作為多維資料集建立的源。
- SQL Server 2008和2012的SQL Server Integration Services(SSIS),它提供SQL Server型別對映以在HP Vertica和SQL Server之間對映資料型別。使用SSIS進行資料遷移,資料整合和工作流以及ETL。
- SQL Server Reporting Services(SSRS)。使用SSRS生成報告。
Vertica .NET整合
Infra Architecture
在Vertica .NET整合工作中,Infra架構的設計如下:
App Server層添加了Vertica ODBC連線元件,以建立.NET App和HP Vertica資料層之間的通訊。
資料層包含基於群集的HP Vertica DB。表示層保持原樣。
邏輯架構
根據行業標準的n層體系結構,HP Vertica .NET整合的應用程式邏輯體系結構如下所示:
連線程式碼
程式設計師應使用連線屬性來配置ADO.NET客戶端應用程式和HP Vertica資料庫之間的連線。
您可以通過兩種方式設定連線屬性:
- 包含屬性名稱和值作為傳遞給VerticaConnection的連線字串的一部分。
- 在VerticaConnectionStringBuilder物件中設定屬性,然後將物件作為string傳遞給 VerticaConnection。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Vertica.Data.VerticaClient;
namespace VerticaApp
{
class Connectivity
{
static void Main(string[] args)
{
/*
* HP Vertica ADO.NET drivers connection string builder
*/
VerticaConnectionStringBuilder builder = new VerticaConnectionStringBuilder();
/*
* In the connection string, you need to specify the Host,
* Database, and User at the minimum
*/
builder.Host = "192.10.10.10";
builder.Database = "TestDB";
builder.User = "AppUser";
/*
* Build an HP Vertica connection object by the connection strings
* Then, initiate the connection by Open method
*/
VerticaConnection conn = new VerticaConnection(builder.ToString());
conn.Open();
/*
* Perform some data operations here..
* Finally, connection object is closed
*/
conn.Close();
}
}
}
CRUD操作
CRUD操作是解釋應用程式和資料儲存層之間功能的最佳用例。在給定的示例中,詳細附加了工作程式碼(刪除除外)。
建立程式碼
您可以使用帶引數的預準備語句批量載入資料。如果遇到任何錯誤,您還可以使用事務來回滾批處理載入。
如果要載入大批量資料(超過100MB),請考慮使用直接批量插入。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Vertica.Data.VerticaClient;
namespace VerticaApp
{
class Create
{
static void Main(string[] args)
{
/*
* HP Vertica ADO.NET drivers connection string builder
*/
VerticaConnectionStringBuilder builder = new VerticaConnectionStringBuilder();
/*
* In the connection string, you need to specify the Host,
* Database, and User at the minimum
*/
builder.Host = "192.10.10.10";
builder.Database = "TestDB";
builder.User = "AppUser";
/*
* Build an HP Vertica connection object by the connection strings
* Then, initiate the connection by Open method
*/
VerticaConnection conn = new VerticaConnection(builder.ToString());
conn.Open();
/*
* Vertica INSERT operation into the existing Employee table with ID,
* First, Last, Mail, Department fields
*/
VerticaCommand command = conn.CreateCommand();
command.CommandText =
"INSERT into Employee values(1001, 'FirstName', 'LastName', 'eMail', 'Dept7')";
Int32 rowsAdd = command.ExecuteNonQuery();
Console.WriteLine(rowsAdd + " rows added!");
/*
* Finally, connection object is closed
*/
conn.Close();
}
}
}
閱讀程式碼
附加的程式碼snap用於將現有vertica表中的內容檢索到.NET應用程式層。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Vertica.Data.VerticaClient;
namespace VerticaApp
{
class Read
{
static void Main(string[] args)
{
/*
* HP Vertica ADO.NET drivers connection string builder
*/
VerticaConnectionStringBuilder builder = new VerticaConnectionStringBuilder();
/*
* In the connection string, you need to specify the Host,
* Database, and User at the minimum
*/
builder.Host = "192.10.10.10";
builder.Database = "TestDB";
builder.User = "AppUser";
/*
* Build an HP Vertica connection object by the connection strings
* Then, initiate the connection by Open method
*/
VerticaConnection conn = new VerticaConnection(builder.ToString());
conn.Open();
/*
* Vertica SELECT operation from the existing 2 relational tables
* Employee and Department with DeptID field as reference
*/
VerticaCommand command = conn.CreateCommand();
command.CommandText =
"SELECT Mast.EmpID, Mast.FirstName, Mast.LastName, Mast.Mail, Ref.DeptName " +
" FROM Employee Mast, Department Ref " +
" WHERE Mast.DeptID == Ref.DeptID " +
" ORDER BY Mast.EmpID " +
" LIMIT 100 ";
/*
* To read data from the database use VerticaDataReader,
* an implementation of DbDataReader
*/
VerticaDataReader reader = command.ExecuteReader();
Console.WriteLine(" EmployeeName\t Department");
Console.WriteLine("------------\t -------------------");
/*
* Data Read query is parsed to navigate the final result
*/
int rows = 0;
if (VerticaDataReader.HasRows())
{
while (reader.Read())
{
Console.WriteLine(" " + reader[1] + reader[2] + " \t " + reader[4]);
++rows;
}
}
Console.WriteLine("Total Read Rows: (" + rows + ")");
reader.Close();
/*
* Finally, connection object is closed
*/
conn.Close();
}
}
}
更新程式碼
更新方案是更改給定條件的現有Vertica表元素的內容。它由Vertica客戶端庫派生。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Vertica.Data.VerticaClient;
namespace VerticaApp
{
class Update
{
static void Main(string[] args)
{
/*
* HP Vertica ADO.NET drivers connection string builder
*/
VerticaConnectionStringBuilder builder = new VerticaConnectionStringBuilder();
/*
* In the connection string, you need to specify the Host,
* Database, and User at the minimum
*/
builder.Host = "192.10.10.10";
builder.Database = "TestDB";
builder.User = "AppUser";
/*
* Build an HP Vertica connection object by the connection strings
* Then, initiate the connection by Open method
*/
VerticaConnection conn = new VerticaConnection(builder.ToString());
conn.Open();
/*
* Vertica UPDATE operation in the existing table Employee
* Mail info is updated for the given FirstName and LastName
* Updation driving fields are parameterized
*/
VerticaCommand command = new VerticaCommand();
command.Text =
"UPDATE Employee " +
" SET Mail = " + "[email protected]" +
" WHERE FirstName = @First AND " +
" LastName = @Last ";
command.Parameters.Add(new VerticaParameter( "First", VerticaType.VarChar));
command.Parameters.Add(new VerticaParameter( "Last", VerticaType.VarChar));
command.Parameters["First"] = 'Ganesan';
command.Parameters["Last"] = 'Senthilvel';
Int32 rowsUpdate = command.ExecuteNonQuery();
/*
* Finally, connection object is closed
*/
conn.Close();
}
}
}
原文地址:https://www.codeproject.com/Articles/864654/NET-Programming-using-HP-Vertica