greenplum和postgresql
想着要不要写,两个原因“懒”和“空”。其实懒和空也是有联系的,不是因为懒的写,⽽是因为对PostgreSQL和Npgsql的知识了解匮乏,也就懒得写。好了,开头就写到这⾥,有些绕⼝令的感觉。⼀贯以这种不靠谱的描述开头,也成为了⼀种习惯,既然是习惯,也还不算坏,得坚持。
  其实想写PostgreSQL和Npgsql的博客起因还是因为项⽬中⽤到了,虽然⽹上有很多对PostgreSQL数据库⽀持的类库,可以拿来就⽤,但多少有些不踏实。也许是⽼了的原因,危机意识的督促下,还是决定对PostgreSQL数据库和Npgsql进⾏⼀番了解,且听我道来。
  ⼀、PostgreSQL数据库
  介绍:PostgreSQL是⼀种运⾏在Unix和Linux操作系统(在NT平台借助Cygnus也可以运⾏)平台上的免费的开放源码的关系数据库。最早是由美国加州⼤学伯克利分校开发的,开始只是作为⼀个演⽰系统发表,但是随着时间的推移,逐步分发,得到很多实际的应⽤,才逐步流⾏起来。
  特点:1.省钱,可以运⾏在Unix和Lunux操作系统上,Windows Server 什么时候也能⾼风亮节回。
     2.⽀持SQL。
     3.有丰富的数据类型。许多数据类型是⼀些商业数据库都没有提供的。
     4.⾯向对象,它包含了⼀些⾯向对象的技术,如继承和类。
     5.⽀持⼤数据,它不同于⼀般的桌⾯数据库,能够⽀持⼏乎不受限制⼤⼩的数据库,⽽且性能稳定。
      描述:我想这个特点也是觉⼤多数据考虑使⽤PostgreSQL数据库的原因之⼀,当然这种场景应该是有要求的,⽐如⼀些并发不⾼,但涉及统计分析类业务的场景相对⽐较适合。
     6.⽅便集成web,提供⼀些接⼝⽅便 PHP,Perl等语⾔操作数据库。
      描述:重点来了,Npgsql动态库就是为了更好的⽀持C#的⼀个强⼤的类库(后⾯会有描述)。
     7.事务处理。相对⼀些其他免费数据库如MySQL,他提供了事务处理,可以满⾜⼀些商业领域的数据需要。
      描述:事务对数据库来真的是太重要了,所以PostgreSQL不会遗忘。
     8.PostgreSQL运⾏速度明显低于MySQL。因为MySQL使⽤了线程,⽽PostgreSQL使⽤的是进程。在不同线程之间的环境转换和访问公⽤的存储区域显然要⽐在不同的进程之间要快得多。
     9.PostgreSQL的Sql语法相对更加⼲净和⼲练(这个特点的总结来⾃于公司PostgreSQL专家的现场采访)
  ⼆、Greenplum
  介绍:Greenplum是⼀家总部位于美国加利福尼亚州,为全球⼤型企业⽤户提供新型企业级数据仓库(EDW)、企业级数据云(EDC)和商务智能(BI)提供解决⽅案和咨询服务
  特点:1.⼤规模并⾏处理架构
     2.⾼性能加载,使⽤ MPP 技术,提供 Petabyte 级别数据量的加载性能
     3.⼤数据⼯作流查询优化
     4.多态数据存储和执⾏
     5.基于 Apache MADLib 的⾼级机器学习功能
  应⽤场景:1.⼤数据量的统计分析类业务(这个也是⽬前统计分析业务结合考量后所出的选择)。
  三、Npgsql
  介绍:Npgsql是PostgreSQL的⼀个.NET数据提供程序。
  四、 调⽤Greenplum的实战
  在最近的⼀个项⽬中,由于业务的需要。业务特点:⼤数据统计分析业务,并发不⾼,但数据量相对巨⼤。为此DBA⽅⾯决定尝试Greenplum数据库进⾏相关业务数据层⾯的开发,所谓数据层⾯的开发,你懂得,就是将数据处理业务写在如存储过程中(SqlServer 数据
greenplum数据库
库)或者函数(Greenplum数据库)。
  1.Greenplum函数
  在SqlServer数据库中,⼀般业务的封装都是以存储过程的形式存在的。但在Greenplum中则是以函数的⽅式进⾏业务封装的。正是由
于这种两不同的封装⽅式导致我们调⽤或者说对接的⽅式不同。
(1).SqlServer 存储过程的调⽤⽅式
DataSet ds = MSSqlHelper.ExecuteDataset(DataBase.Sql_TKAgentDB, CommandType.StoredProcedure, "[prm].
[WCall_GetCostEffect]", parms);
SqlServer 存储过程的调⽤⽅式我相信⼤家都已经很熟悉了,上⾯代码事例中的 parms 是SqlParameter 数组,在此我就不再进⾏过多描
述了,其实我是希望以对⽐的⽅式来看看 PostgresSQL中的函数调⽤⽅式有什么不同。
(2).PostgresSQL中函数的调⽤⽅式
SELECT * st ( @aIn, @bIn, @cIn, @dIn, @eIn ) as ( aOut varchar , bOut varchar , cOut integer, dOut numeric(16,2), eOut numeric(
⼤家看到区别了吧,PostgresSql中函数的调⽤是以 SELECT * FROM 函数(st)的⽅式进⾏调⽤,同时要注意的是PostgresSql的
输出参数是要声明类型的,⽐如
aOut integer,aOut 是就是返回值之⼀,在此声明为整形类型。之所以要强调⼀下是因为在实际开发当中很容易以SqlServer 存储过程调
⽤⽅式的思维所左右,导致很长⼀段时间内不知道问题究竟是出在哪⾥。下⾯我在描述⼀个完整的⽅法来整体看⼀PostgresSql函数的调⽤
⽅式。
string sql = @"SELECT * st ( @aIn, @bIn, @cIn, @dIn, @eIn ) as ( aOut varchar , bOut varchar , cOut integer, dOut numeric(16,2), eOut nu
这个代码⽚段相对清晰的说明了问题。NpgsqlParameter 对象是 Npgsql 动态库中提供的⼀个对象,⼤家只要引⽤了Npgsql.dll 就可以
了。⾄于其他的参数我想就不⽤我过多的解释了,相信⼤家⼀看就明⽩了,由于是实际业务中的代码⽚段,在此就不进⾏⽅法功能的描述
了。
  五、PostgreSQLHelper类
  你也知道,Mysql的⽀持类我们有MySqlHelper⽀持类的封装,SqlServer的⽀持类我们有MsSqlHelper的⽀持类的封装,所以PostgresSqlHelper的⽀持类怎么能缺席,当然以下代码是我从⽹上下载到的,之所以在此列出,⼀⽅⾯是希望整个博客的内容更加完整
化,体系化,同时也是希望能做个内容的备份,便于以后⾃⼰再⽤到这块内的时候有个引导的作⽤。当然也希望能给⼤家带来直接的便利。
public class PostgreSQL { /// <summary>  /// 得到数据条数  /// </summary>  public int GetCount(string connectionString, string tblName, string condition

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。