武汉postgresql的简单介绍

有哪位知道为什么说数据库技术是信息资源管理最有效的手段

ADODB 是 Active Data Objects Data Base 的简称,它是一种 PHP 存取数据库的函式组件。现在 SFS3 系统 (校园自由软件交流网学务系统) 计划的主持人陈莹光老师,决定采用此一组件,为了让更多有心参与该项目的伙伴们能够顺利加入发展的行列,小弟认为有必要把 ADODB 的中文入门介绍写出来,以方便伙伴们参考备查。

创新互联建站服务项目包括都匀网站建设、都匀网站制作、都匀网页制作以及都匀网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,都匀网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到都匀省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

虽然 PHP 是建构 Web 系统强有力的工具,但是 PHP 存取数据库的功能,一直未能标准化,每一种数据库,都使用另一种不同且不兼容的应用程序接口(API)。为了填补这个缺憾,因此才有 ADODB 的出现。一旦存取数据库的接口予以标准化,就能隐藏各种数据库的差异,若欲转换至其它不同的数据库,将变得十分容易。

目前 ADODB 支持的数据库种类非常地多,例如:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, Sybase, DB2 以及一般的 ODBC (其中 PostgreSQL、Informix、Sybase 的driver 是由自由软件社群发展之后贡献出来的)。

使用 ADODB 最大的优点之一是:不管后端数据库如何,存取数据库的方式都是一致的,开发设计人员不必为了某一套数据库,而必须再学习另一套不同的存取方法,这大大减轻开发人员的知识负担,过去的知识往后仍可继续使用,转移数据库平台时,程序代码也不必做太大的更动。

其实 ADODB 这样的发展理念,并不是首创的,DBI 比 ADODB 出现得更早,它提供 Perl 存取数据库时,使用一致的 API 呼叫接口。相信用过 Perl + DBI 的朋友,再来用 ADODB 时,会有一种似曾相识的感觉。

另外,ADODB 对用过 ASP 的人而言,应该不陌生,这类朋友对 ADODB 应该很容易接受。

我们来看一下,ADODB 的简单用法:

?php

// 引入 adodb 的 inc 档,才能呼叫 adodb 提供的函式

include('adodb/adodb.inc.php');

// 选择连接的数据库种类,以建立联机对象,

// 一旦对象建立,即可使用其成员函式来处理数据库。

// 以下 $conn 即此一物件(object)

$conn = ADONewConnection('mysql');

// 要不要显示侦错讯息,false 不要,true 要。

// $conn-debug = false;

$conn-debug = true;

// 连接数据库

// 用法:$conn-Connect('主机', '使用者', '密码', '数据库');

// 用例:

$conn-Connect('localhost', 'piza', 'ooo123', 'test');

// 若欲采用持续性连接,上式可换用 PConnect:

// $conn-PConnect('localhost', 'piza', 'ooo123', 'test');

// 设定 sql 命令

$sql = "insert into t values ('abcde', 18)";

// 执行 sql 命令

$rs = $conn-Execute($sql);

// 检查执行结果,若 $rs == false,则呼叫 $conn 对象的成员函式 ErrorMsg()

if (!$rs) print $conn-ErrorMsg(); else print "OK!";

?

结果如下:

---------------------------------------------

(mysql): insert into t values ("abcde",18)

---------------------------------------------

OK!

若把侦错关掉,即 $conn-debug=false,则结果如下:

OK!

以下,逐步为各位介绍:使用 ADODB 的重点方法。

2. 安装

ADODB 的首页在:,目前(2002/10/24)最新版是:2.42 版,可至 ADODB 下载或至台南县教网中心 FTP 下载。

安装 ADODB 的方法超极简单,只要下载、解压、放入适当位置,即可完成 ! 如下所示:

1. 下载:

$ ncftp

cd sysop/ADODB

get adodb242.tgz

2. 解压:

假设我把 adodb242.tgz 放入 /var/www/html 中

$ cp adodb242.tgz /var/www/html

$ tar xvzf adodb242.tgz

如下所示:

adodb/adodb-cryptsession.php

adodb/adodb-csvlib.inc.php

adodb/adodb-errorhandler.inc.php

adodb/adodb-errorpear.inc.php

adodb/adodb-lib.inc.php

adodb/adodb-pager.inc.php

....以下省略....

现在,您在 /var/www/html/adodb 已安装好 ADODB 了。

3. 引入 ADODB

一旦安装好 ADODB,使用前,应把 ADODB 相关的含入文件引入您的程序中。adodb 目录放在任何位置无所谓,只要能指向正确路径文件名即可。一般而言,您的程序代码只须引入 adodb.inc.php。

作法如下:

在您的 PHP 程序中:

include('路径/adodb/adodb.inc.php');

include_once('路径/adodb/adodb.inc.php');

例:

若您的程序和 adodb 在同一目录下:

.

..

adodb/

something.php*

则:

include('adodb/adodb.inc.php');

即可。

若位置是在某一个目录 somedir 中:

.

..

adodb

somedir/something.php

则必须使用:

include('../adodb/adodb.inc.php');

除了 adodb.inc.php 这个含入档,ADODB 还提供许多 adodb-*.inc.php 的含入档,这些多半是为驱动某些数据库的特殊用法而设的。

若是引入 adodb-session.php 则可让您将 session 存入数据库中来维护运用。

若是引入 adodb-pager.inc.php,可方便您做分页显示。

若是引入 adodb-errorhandler.inc.php,可让您自订错误处理讯息。

若是含入 adodb-pear.inc.php,可让您使用 PHP4 的 PEAR DB 语法来使用 ADODB。此时,尚可使用 DSN 连接数据库的字符串设定。如 $dsn="mysql://piza:ooo123@localhost/test";

若是引入 tohtml.inc.php,可帮您在程序代码中,方便将取出的记录,转成 HTML 的表格(table)来显示。

若是引入 toexport.inc.php,可让您方便地输出 CSV 档或以 tab 分隔字段的数据文件。

若是引入 rsfilter.inc.php,可让您在使用记录之前,预做过滤处理。

若是引入 pivottable.inc.php,可让您使用 pivot table 功能(俗称 cross-tabulations)。

注意 ! adodb.inc.php 是一定要引入的,其它,则视您要使用那一个功能,再引入该含入档即可。

4. 选用数据库种类,建立联机对象

由于 ADODB 使用对象导向的作法,因此您在引入档之后,接着请视您后端数据库的种类,建立一个联机对象。作法如下:

以 MySQL 数据库为例:

$conn = ADONewConnection('mysql');

注:NewADOConnection 和 ADONewConnection 是一样的,二者皆可使用。

上例中的 'mysql' 是指数据库的 drvier 的种类,ADODB 会据此呼叫对应的数据库 driver。

其它常用的 driver 有:access、ado、ado_access、ado_mssql、db2、vfp、ibase、borland_ibase、informix、 imformix72、mssql、oci8、odbc、postgres、postgres64、postgres7、sqlanywhere、 sybase....等等。

我们称建立的对象 $conn 为一 ADOConnection 对象,它代表与数据库的连接事务,皆透过这个对象来处理。ADOConnection 对象会提供许多处理的方法,以对象导向的说法,这些方法称为成员函式,这是外界存取此一对象的接口。

一旦联机对象建立之后,就有许多对象函式可供您使唤啦 ! 请看下一节的介绍。

5. 侦错模式

程序开发的过程,为了方便查出出现问题可能的地方,通常我们会打开侦错模式,俟程序功能确实稳定之后,再将它关闭。ADODB 提供侦错模式,存取数据库时,能显示其运作方式。

打开侦错模式,使用法:

$conn-debug=true

关闭侦错模式,使用法:

$conn-debug=false

6. 连接数据库

接着,使用 $conn 联机对象的 Connect 或 PConnect 函式来连接特定的数据库,此时必须提供 DSN (Data Source Names)相关数据,DSN 可能包括:主机名称、数据库使用者、数据库密码、数据库名称。不同的数据库种类,DSN 可能可以省略其中若干项。以 MySQL 而言,则上述四者都要提供。

该函式会传回 true 或 false,用以表示是否连接成功。

用例:

// 格式:$conn-Connect('主机', '使用者', '密码', '数据库');

$conn-Connect('localhost', 'piza', 'ooo123', 'test');

或者,采持续性连接:

// 格式:$conn-PConnect('主机', '使用者', '密码', '数据库');

$conn-PConnect('localhost', 'piza', 'ooo123', 'test');

若欲探查是否有联机成功,可用一个变量来接取传回值:

$mch="localhost";

$user="piza";

$pwd="ooo123";

$database="test";

$cok = $conn-Connect($mch, $user, $pwd, $database);

或者,采持续性连接:

$cok = $conn-PConnect($mch, $user, $pwd, $database);

if (!$cok) { echo "无法连接数据库 $database"; exit; }

7. 设定 sql 命令语法、执行 sql 命令

接下来,您就可以设计您要执行的 sql 命令语法,然后付诸执行。

$sql = "这里放 SQL 的命令语法";

$rs = $conn-Execute($sql);

其中,$rs 为回传的结果,若 $rs == false,则表示执行失败,您必须仔细检查一下。

您不一定要把命令语法放在 $sql 变量中,也可以直接放入 Execute( ) 括号中。若命令较短无妨,若命令较长,我建议您还是用一个变量 $sql 来设定命令字符串吧 !

下一节开始,为各位介绍 SQL 的基本命令,如:Insert、Select、Update、Delete 等等的用法。

8. 插入记录(Insert)

Insert 的用法如下:

// $name 为字符串,$year 为数字

$name='abcde';

$year=18;

// 插入一笔记录,命令的大小写无妨,但数据表 t 及变量则大小写有分别 !

$sql = "INSERT INTO t VALUES ('$name', $year)";

// $sql = "insert into t values ('$name', $year)"; 亦可。

// 执行

$rs = $conn-Execute($sql);

// 检查执行结果,进行错误处理;若正常,则继续其它动作....

if (!$rs) print $conn-ErrorMsg();

....以下省略....

ErrorMsg() 是错误显示的函式,它会取出错误讯息,并显示出来。

另外,ADODB 提供一种 记录集(RecordSet) 函式 GetInsertSQL(),可帮您产生 Insert 的语法。

例子如下:

?php

// 引入 ADODB

include('adodb/adodb.inc.php');

// 建立联机对象

$conn = ADONewConnection('mysql');

// 侦错

$conn-debug=true;

// DSN 四项基本数据设定

$mch="localhost";

$user="root";

$pwd="jack168";

$database="test";

// 连接至数据库 test

$conn-PConnect($mch, $user, $pwd, $database);

// 产生一笔空记录

$sql = "select * from t where year=-1";

$rs = $conn-Execute($sql);

// 用一个空数组来装要更新的数据

$r = array();

$r['name']='john';

$r['year']=28;

// 用 GetInsertSQL 函式来制作一个完整的 sql 命令,此 sql 命令放在 $insertSQL 中

$insertSQL = $conn-GetInsertSQL($rs, $r);

// 执行插入

$conn-Execute($insertSQL);

$conn-Close();

?

侦错讯息如下:

-----------------------------------------------------------

(mysql): select * from t where year=-1

-----------------------------------------------------------

(mysql): INSERT INTO t ( name, year ) VALUES ( 'john', 28 )

-----------------------------------------------------------

9. 取出记录(Select)

Select 的用法如下:

?php

// 引入 ADODB

include('adodb/adodb.inc.php');

// 建立联机对象

$conn = ADONewConnection('mysql');

// 不侦错

$conn-debug=false;

// DSN 四项基本数据设定

$mch="localhost";

$user="piza";

$pwd="ooo123";

$database="test";

// 连接至数据库 test

$conn-PConnect($mch, $user, $pwd, $database);

// 执行 Select 由表格 t 取出数据,

// 它会传回一个 ADORecordSet 记录集对象 $rs (RecordSet)

// 实际上 $rs 是一个 cursor 指标,它拥有目前的记录(row 或称 record),

// 该记录的所有字段数据的内容,存放在 fields 这个数组之中

// ,以数字为索引,第一个由 0 开始

$rs = $conn-Execute('select * from t');

// 若 $rs 为 false,则秀出错误讯息

if (!$rs) {

print $conn-ErrorMsg();

} else {

// 当尚未到达 记录集 $rs 的结束位置(EOF:End Of File)时,(即:还有记录尚未取出时)

while (!$rs-EOF) {

// 秀出所有字段,$FieldCount() 会传回字段总数

for ($i=0, $max=$rs-FieldCount(); $i $max; $i++) {

print $rs-fields[$i] . " ";

}

// 移至下一笔记录

$rs-MoveNext();

// 换列

echo "br\n";

}

}

$rs-Close(); // 可不用

$conn-Close(); // 可不用

?

$rs-fields[] 数组是由 PHP 的数据库扩展功能产生的,某些扩展功能并不支持使用字段名称当作索引。

若欲使用名称当作索引,也就是俗称的 hash 或 associative arrays,则需使用全域变量 $ADODB_FETCH_MODE 加以指定。

以下设定:使用数字索引 $ADODB_FETCH_MODE= ADODB_FETCH_NUM;

以下设定:使用名称索引 $ADODB_FETCH_MODE= ADODB_FETCH_ASSOC;

下面是使用名称索引的例子:

?php

// 引入 ADODB

include('adodb/adodb.inc.php');

// 建立联机对象

$conn = ADONewConnection('mysql');

// 不侦错

$conn-debug=false;

// DSN 四项基本数据设定

$mch="localhost";

$user="root";

$pwd="jack168";

$database="test";

// 连接至数据库 test

$conn-PConnect($mch, $user, $pwd, $database);

// 执行 sql 之前,指定使用名称索引

$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;

// 执行 Select,它会传回一个 ADORecordSet 记录集对象 $rs

// 实际上 $rs 是一个 cursor 指标,它拥有目前的记录内容,

// 该记录存放在 fields 这个数组之中

$rs = $conn-Execute('select * from t');

// 若 $rs 为 false,则秀出错误讯息

if (!$rs) {

print $conn-ErrorMsg();

} else {

// 当尚未到达记录集结束位置(EOF)时,

while (!$rs-EOF) {

// 秀出所有字段

print $rs-fields['name'] . " " . $rs-fields['year'];

// 移至下一笔记录

$rs-MoveNext();

// 换列

echo "br\n";

}

}

$rs-Close(); // 可不用

$conn-Close(); // 可不用

?

10. 取出记录(使用 FetchRow)

这里示范 FetchRow 的用法:

$sql = "select * from t";

$rs = $conn-Execute($sql);

if ($rs) {

while( $ar = $rs-FetchRow() ) {

print $ar['name'] ." " . $ar['year'];

print "br\n";

}

}

FetchRow() 会将取出的记录传回,您可用一个 array 来接取。

注意 ! 使用 FetchRow() 就不必再用 MoveNext(),FetchRow 内部会自动完成移至下一笔记录的动作。

11. 更新记录(Update)

您可以用传统的方式:

$sql ="UPDATE t SET name='john', year=28 WHERE year=18";

$conn-Execute($sql);

也可以用以下这种方式:

?php

// 引入 ADODB

include('adodb/adodb.inc.php');

// 建立联机对象

$conn = ADONewConnection('mysql');

// 侦错

$conn-debug=true;

// DSN 四项基本数据设定

$mch="localhost";

$user="piza";

$pwd="ooo123";

$database="test";

// 连接至数据库 test

$conn-PConnect($mch, $user, $pwd, $database);

// 选择要更新的那一笔记录

$sql = "select * from t where year=18";

$rs = $conn-Execute($sql);

// 用一个空数组来装要更新的数据

$r = array();

$r['name']='john';

$r['year']=28;

// 用 GetUpdateSQL 函式来制作一个完整的 sql 命令,此 sql 命令放在 $updateSQL 中

$updateSQL = $conn-GetUpdateSQL($rs, $r);

// 执行更新

$conn-Execute($updateSQL);

$conn-Close();

?

侦错讯息如下:

-------------------------------------------------------------

(mysql): select * from t where year=18

-------------------------------------------------------------

(mysql): UPDATE t SET name = 'john', year = 28 WHERE year=18

-------------------------------------------------------------

12. 删除记录(Delete)

删除记录很简单,采传统方式即可: $sql = "DELETE FROM t WHERE year=18";

$rs = $conn-Execute($sql);

13. 使用字段对象(Field Objects)

这里示范字段对象 FetchField 的用法,用以取得字段名称及字段型态:

$sql = "select * from t";

$rs = $conn-Execute($sql);

if ($rs) {

while (!$rs-EOF) {

// 取出第二个字段

$f = $rs-FetchField(1);

// 印出字段名称 及 字段型态

print $f-name . ":" . $f-type;

$rs-MoveNext();

print "br\n";

}

}

另外,ADODB 提供一个 RecordSet 函式 MetaType(),可将原始的字段型态转成一般型态代码:

C : 字符

X : text

B : blob

D : 日期

T : timestamp

L : 布尔值或位

I : 整数

N : 数字型态,包括:自动增加、数值、浮点数、实数及整数

R : serial、自动增加

用例:

$f = $rs-FetchField(1);

// 印出字段名称 及 字段型态的代码

print $f-name . ":" . $rs-MetaType($f-type);

14. 简单分页(Pager)

ADODB 提供一种简单分页显示记录的方法,使用前,要将 adodb-pager.inc.php 引入。

?php

include('adodb/adodb.inc.php');

// 引入分页功能

include('adodb/adodb-pager.inc.php');

// 启动 session

session_start();

$db = ADONewConnection('mysql');

$mch="localhost";

$user="piza";

$pwd="ooo123";

$database="test";

$db-Connect($mch, $user, $pwd, $database);

$sql = "select * from t";

// 产生 pager 对象

$pager = new ADODB_Pager($db, $sql);

// 每一页秀 5 笔记录

$pager-Render($rows_per_page=5);

?

结果如下:

Figure 1. 简单分页功能

每页显示记录的数目是由 Render() 来控制的,若没有传入指定的 row 数给 Render(),默认值每页秀 10 笔。

另外,字段名称也可以改变,如下示范:

?php

include('adodb/adodb.inc.php');

// 引入分页功能

include('adodb/adodb-pager.inc.php');

// 启动 session

session_start();

$db = ADONewConnection('mysql');

$mch="localhost";

$user="piza";

$pwd="ooo123";

$database="test";

$db-Connect($mch, $user, $pwd, $database);

$sql = "select name as '姓名', year as '年纪' from t";

// 产生 pager 对象

$pager = new ADODB_Pager($db, $sql);

// 每一页秀 5 笔记录

$pager-Render($rows_per_page=5);

?

结果如下:

Figure 2. 改变字段名称

15. 输出 CSV 档

ADODB 提供输出 CSV 档的方法,使用前,要将 toexport.inc.php 引入。

?php

include('adodb/adodb.inc.php');

// 引入输出 CSV 文件功能

include('adodb/toexport.inc.php');

$db = ADONewConnection('mysql');

$mch="localhost";

$user="piza";

$pwd="ooo123";

$database="test";

$db-Connect($mch, $user, $pwd, $database);

$sql = "select name as '姓名', year as '年纪' from t";

$rs = $db-Execute($sql);

// 秀出 CSV 格式

print rs2csv($rs);

?

结果如下:

姓名,年纪

abcde,45

yyy,20

ppp,34

mmm,13

hhh,41

rrr,65

kkk,29

miso,154

sss,89

abc,18

abcde,0

uyt,58

john,28

也可用 tab 分隔字段,使用 rs2tab 方法如下:

print rs2tab($rs, false);

注: false 表示不显示字段名称

结果如下:

abcde 45

yyy 20

ppp 34

mmm 13

hhh 41

rrr 65

kkk 29

miso 154

sss 89

abc 18

abcde 0

uyt 58

john 28

若是 print rs2tab($rs, true);

结果如下:

姓名 年纪

abcde 45

yyy 20

ppp 34

mmm 13

hhh 41

rrr 65

kkk 29

miso 154

sss 89

abc 18

abcde 0

uyt 58

john 28

也可以将结果由标准输出(STDOUT)显示,使用 rs2tabout 方法如下:

print rs2tabout($rs);

执行结果如下:

Figure 1. 在console中显示结果

也可以存成 CSV 档:

// 档案路径

$path = "/tmp/test.csv";

// 开档供写入

$fhd = fopen($path, "w");

// 若开档成功

if ($fhd) {

// 则写入 CSV

rs2csvfile($rs, $fhd);

// 也可以使用 rs2tabfile($rs, $fhd);

// 关档

fclose($fhd);

}

结果如下:

[ols3@p web]$ cat /tmp/test.csv

姓名,年纪

abcde,45

yyy,20

ppp,34

mmm,13

hhh,41

rrr,65

kkk,29

miso,154

sss,89

abc,18

abcde,0

uyt,58

john,28

16. 取出一定笔数的记录 (使用 SelectLimit)

ADODB 提供一个 ADOConnect 函式 SelectLimit,可供您取出一定笔数的记录,用法如下:

$conn-Connect($mch, $user, $pwd, $database);

rs = $conn-SelectLimit("Select * from t", 3, 1);

// 取出 3 笔、在第 1 笔之后

// 秀出这 3 笔记录

if ($rs) {

while( $ar = $rs-FetchRow() ) {

print $ar['name'] ." " . $ar['year'];

print "br\n";

}

}

上式是说:在第 1 笔记录之后,取出 3 笔,也就是第 2、3、4 笔记录。

结果如下:

--------------------------------------

(mysql): select * from t LIMIT 1,3

--------------------------------------

注意 ! SelectLimit 的写法刚好和 MySQL 语法相反 !

17. 结语

本讲义,主要是为:有心参与 SFS3 (sfs.wpes.tcc.edu.tw) 计划的伙伴们而写的。做为一份入门文件,以上这些介绍,应该是足够让您了解 ADODB 并且能把它应用在 SFS3 或其它有意义的地方了吧? 若果真如此,小弟就心满意足了 !

ref. 参考资源

ADODB 网站

ADODB 手册

PHP 对象导向入门

本文链接:

“去IOE”7年 银行IT架构国产化还需多久?

7月底,农行(601288.SH)宣告成立金融 科技 子公司农银金融 科技 有限责任公司,注册资本6亿。目前已有11家银行成立金融 科技 子公司,包括五家国有大行、五家股份行和一家城商行。新一家金融 科技 子公司的成立振奋市场,而国内银行金融 科技 是否能够与国际抗衡,是否能完成“进口替代”的话题再次浮出水面。

长久以来,IOE技术架构是银行业的标准配置和唯一选择,而在2013年之后,由于金融系统IT架构定价权和 游戏 规则控制在海外厂商手中,并且随着移动互联网的普及,高频交易让传统系统不堪重负,银行业也开始艰难谋求去IOE。

时隔7年,在金融 科技 助推下,银行们通过自我研发去IOE仍在进行中,也有银行依靠互联网等外部力量以求快速实现IT架构国产化。

银行业去IOE始于2013年左右。图 站酷海洛

IOE,分别指IBM(国际商用机器公司)、Oracle(甲骨文)和EMC(易安信),三者分别是小型机、数据库和高端存储的领导厂商,一定程度上主导了企业的IT架构。它们组成的系统一度被视为大型金融企业后台的“黄金架构”。

中国银行业自上世纪90年代开始逐步实现电子化,陆续采用数据、操作、应用大集中的管理模式,即数据中心大集中时代,以革除各家分支行各自为政的弊病,实现网点和业务的数据集中。而IBM以其强大的数据处理能力,装机量在国内一枝独秀。

当时,各类银行争相引进海外业务系统产品,实现流程改造和管理方式改革。

银行业去IOE始于2013年左右。

一直以来,由于银行业采用IOE为代表的IT基础体系,使得如此重要的金融机构IT整体都处于海外厂商的控制之中。可想而知,如若存在技术漏洞,或被主动植入漏洞,或者是国与国之间产生矛盾,供应商被要求停止技术服务,则金融业暴露在安全风险之中。

因此,国家层面基于金融与信息安全的导向推动提出了去IOE的想法,2012年6月国务院发布《关于大力推进信息化发展和切实保障信息安全若干意见》(国发〔2012〕23号),金融监管部门也期望银行逐年减轻对IOE的依赖程度。

尽管去IOE化在2014年、2015年就成为了金融 科技 领域的热门话题,但是它的进展速度显然没有它的热度上得快。

广发证券研报显示,去IOE在开始几年在传统银行间开展得并不顺利。

主要原因包括:第一,大型银行当前集中处理的业务模式对于服务器的稳定性要求极高。而IBM大型机/小型机的稳定性无人能及。其次,中小银行采用开放式平台架构,可以不用IBM服务器。但国产设备的性能、安全性、稳定性一直难以被信任。此外,服务器、存储、操作系统、数据库等基础设施层次相互依赖,难以单一替换。因此,过去5-10年,难以真正意义上撼动海外厂商在国内银行业的地位。

金融壹账通总经理助理、Gamma平台CEO区海鹰在接受媒体采访时对21世纪经济报道记者表示,去IOE仍是银行业头疼的问题。“因为金融是国家与 社会 最重要的一个稳定因素,银行业内部使用的技术中IOE占比非常高,如何去IOE对于银行业来说是一个非常大的挑战。”

区海鹰表示,去IOE只能“小步慢走”式迁移,而且这个工作量非常大。应用层、硬件层迁移已经非常耗费精力,而底层的改变要用到全部国产的服务器、网络,难度可想而知,“估计这个改造本身就是5-10年的工作”。

2019年10月,中国互联网金融协会发布的《中国商业银行数字化转型调查研究报告》显示,参与调研的75%的银行已经或正在启动数字化转型。这其中,不少银行通过自行研发实现了国产化架构支撑关键业务。

据微众银行年报披露,截至2018年底,微众银行已建成229个关键系统,1202个子系统。依靠分布式架构及开源技术的深度应用,行内系统成功支持了年内亿级客户量、亿级日交易量,达到国有大型银行同等规模。与此同时,行内账户运维成本持续下降45%。

今年5月,陆金所也宣布去“O”已经完成95%,预计到今年中实现开源数据库的完全替代。陆金所选择了MySQL的开放式架构作为Oracle核心数据库的替代方案。经测算,完全“去O”之后,系统软硬件成本将节约近90%。

如果说,微众银行等互联网银行实现去IOE更为轻车熟路,那么更多的银行通过外部合作,来降低对海外厂商的依赖,近年来尤其实现提速。

2019年5月,华为正式面向全球推出了GaussDB数据库,其GaussDB OLTP数据库已在招商银行综合支付交易系统成功上线投产,也已在工商银行内上线投产。同月,达梦发布DM8.0,10月23日,该新核心系统所引入的达梦数据库正式通过湖北银行项目方的验收。

去年10月,蚂蚁金服OceanBase登顶TPC-C,这是国产数据库首破OLTP的benchmark世界纪录。OceanBase落地西安银行,西安银行完成实施互联网金融业务平台MySQL数据库、互联网交易资金存管平台Oracle数据库向OceanBase分布式数据库的完整迁移。同月,中兴GoldenDB成功帮助中信银行替换DB2,换“心”后的中信银行信用卡核心交易系统对外投产,这是全国性股份制商业银行的首例。11月,腾讯宣布开源TBase数据库,TDSQL数据库落地张家港农商银行新一代核心业务系统。

对于互联网金融公司和银行的 科技 子公司在去IOE领域的竞争,一位金融 科技 业内人士认为,互联网 科技 公司的 科技 创新能力确实非常强,而且也有很大的服务C端用户的规模。银行业尤其是大行金融 科技 子公司从纯技术的角度与互联网公司旗鼓相当,但是互联网公司本身自带流量,具有很大的优势。

但上述人士坦言,数据库市场被国外厂商垄断,自研企业实力与Oracle仍有一定差距。智研咨询发布的《2020-2026年中国数据库市场深度分析及未来发展前景预测报告》显示:2018年我国数据库软件市场规模为139.25亿元,其中,关系型数据库规模约118.36,占比约85%。Oracle数据库关系型数据库市场份额超过46%,占数据库市场约39.1%。

国产数据库方面,既有传统大学成立的数据库企业,包括人大金仓、武汉达梦、神舟通用、南大通用、山东瀚高等,也有近几年主要以阿里、腾讯、华为为代表的企业研发也加快了追赶脚步。

从国产数据库的技术来源看,国产关系型数据库多源自或者借鉴开源MySQL、PostgreSQL等数据库及其变种,或收购商业源码(例如Informix)+自研的方式,大数据平台多源自或直接整合开源大数据生态组件,纯自研的国产数据库较少,数据库种类不够丰富,核心竞争力亟待突破。

更多内容请下载21 财经 APP

Python如今最常见的几个应用领域

介绍一些Python如今最常见的应用领域,以及每个应用领域内所用的一些工具。

系统编程

Python的标准库绑定了POSIX以及其他常规操作系统(OS)工具:环境变量、文件、套接字、管道、进程、多线程、正则表达式模式匹配、命令行参数、标准流接口、Shell 命令启动器、文件名扩展等。

用户图形接口

Python的简洁以及快速开发周期十分适合开发GUI 程序。Python内置了TKinter的标准面向对象接口TK GUI API,使Python程序可以生成可移植的本地观感的GUI。通过适当的库,你可以在Python中使用其他的GUI工具包,例如,通过PyQt使用Qt、通过 PyGTK使用 GTK、通过PyWin32使用 MFC、通过 IronPython使用 .NET,以及通过 Jython(Java版本的Python)使用Swing等。

Internet脚本

Python提供了标准的Internet模块,它使得Python程序能够广泛地在多种网络任务发挥作用,无伦是在服务端还是客户端都是如此。不仅如此,涌现了许多针对Python的 Web开发工具包,例如,Django、TurboGears、web2py、Pylons、Zope 和 WebWare,它们使得Python能够快速构建功能完善和高质量的网站。

组件集成

在上面千锋武汉Python小编也提到过,Python是一门“胶水”语言,它可以通过C/C++系统进行扩展,并能够嵌套C/C++系统的特性,使其能够作为一种灵活的黏合语言。例如,将一个 C 库集成到Python中,能够利用Python进行测试并调用库中的其他组件。

数据库编程

对于数据库,Python提供了对所有主流关系数据库系统的接口,例如,Sybase、Oracle、Informix、ODBC、MySQL、PostgreSQL、SQLite 等。Python标准的pickle模块提供了一个简单的对象可持久化系统:它能够让程序轻松地将整个Python对象保存和恢复到文件和文件类的对象中。

数值计算和科学计算编程

Python在这方面提供了一个非常好的库NumPy,它包括很多高级工具,例如,矩阵、标准数学库的接口等。

游戏、图像、人工智能、机器人等

Python的应用领域很多,例如:

1. 可以利用Pygame系统使用Python对图形和游戏进行编程。

2. 使用PySerial扩展在Windows、Linux以及更多系统上进行串口通信。

3. 用PIL、PyOpenGL、Blender、Maya和其他的一些工具进行图像处理。

4. 用PyRo工具包进行机器人控制编程

5. 使用神经网络仿真器和专业的系统shell 进行AI编程。

6. 使用NLTK包进行自然语言分析。

以上就是Python最常见的一些应用领域。

介绍几个国产数据库?

一、DM

软件名称:达梦数据库(DM)。

开发商:武汉达梦数据库有限公司。

软件描述:

达梦数据库具有如下技术特色:支持多个平台之间的互联互访、高效的并发控制机制、有效的查询优化策略、灵活的系统配置、支持各种故障恢复并提供多种备份和还原方式。

具有高可靠性、支持多种多媒体数据类型、提供全文检索功能、各种管理工具简单易用、各种客户端编程接口都符合国际通用标准、用户文档齐全。

官网:

二、OpenBASE

软件名称:OpenBASE。

开发商:东软集团有限公司。

软件描述:

主要包括OpenBASE 多媒体数据库管理系统、OpenBASE Web应用服务器、OpenBASE Mini嵌入式数据库管理系统、OpenBASE Secure安全数据库系统等产品。

所有的这些产品涵盖了企业应用、Internet/Intranet、移动计算等不同的应用领域,具有不同的应用模式。

形成了OpenBASE面向各种应用的全面的解决方案。多媒体数据库管理系统OpenBASE是OpenBASE产品系列的核心和基础,其它的产品都是在其基础上,根据各自应用领域的不同特点发展、演变而成的。

官网:

三、思极有容

软件名称:思极有容分布式数据库。

开发商:国网信通和创意信息联合研发

软件描述:

一款国产自主可控的分布式关系型数据库。支持国产CPU、操作系统生态,支持云平台和容器。在安全方面,设定多种权限访问、审计、流量控制机制,实现真正资源隔离。

产品采用当前领先分布式技术,提供多种隔离级别,保障完整分布式事务。通过读写分离、并行计算、在线横向扩展,实现集群性能准线性提升,可达数百万级TPM。

官网:

四、KingbaseES

软件名称:金仓数据库管理系统KingbaseES。

开发商:北京人大金仓信息技术有限公司。

软件描述:

交互式工具ISQL;图形化的数据转换工具; 多种方式的数据备份与恢复; 提供作业调度工具;方便的用户管理;支持事务处理;支持各种数据类型;提供各种操作函数;提供完整性约束;支持视图;支持存储过程/函数;支持触发器。

官网:

五、阿里的数据库系统

软件名称:OceanBase PolarDB

官方称为“完全自主研发的金融级分布式关系数据库”。下面是其官网的介绍:OceanBase 对传统的关系数据库进行了开创性的革新。

在普通硬件上实现金融级高可用,在金融行业首创“三地五中心”城市级故障自动无损容灾新标准,同时具备在线水平扩展能力,创造了4200万次/秒处理峰值的纪录(注:当时TPS官宣为25.6w)。

现在OceanBase的版本已经2.x了,OceanBase TPC-C的评测刷遍了朋友圈,TPS达到了100w (6088w tpmc),榜单第一。

官网:

六、腾讯的数据库系统

软件名称:TDSQL

其官网简介:分布式数据库(Tencent Distributed SQL,TDSQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性。

同时提供智能 DBA、自动化运营、监控告警等配套设施,为用户提供完整的分布式数据库解决方案。

目前 TDSQL 已经为超过500+的政企和金融机构提供数据库的公有云及私有云服务,客户覆盖银行、保险、证券、互联网金融、计费、第三方支付、物联网、互联网+、政务等领域。TDSQL 亦凭借其高质量的产品及服务,获得了多项国际和国家认证,得到了客户及行业的一致认可。

官网:

三、华为的数据库系统

软件名称:GaussDB

全球首款AI-Native数据库,内部有100、200、300多个版本,应该是基于PostgreSQL开发的。在国内,可能除了阿里,就到华为的团队了(高斯实验室)。和不少高校建立了合作。

官网:

总结

如果你倾向极强的定制性和高度兼容MySQL,推荐思极有容数据库,因为它这两者是优化到极致且比较简洁,可控性强。

国产的数据库都有哪些

常用数据库

1. IBM 的DB2

作为关系数据库领域的开拓者和领航人,IBM在1997年完成了System R系统的原型,1980年开始提供集成的数据库服务器—— System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型密切相关。DB2 forMVSV1 在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS 提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。

2. Oracle

Oracle 前身叫SDL,由Larry Ellison 和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979 年,Oracle公司引入了第一个商用SQL 关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。

3. Informix

Informix在1980年成立,目的是为Unix等开放操作系统提供专业的关系型数据库产品。公司的名称Informix便是取自Information 和Unix的结合。Informix第一个真正支持SQL语言的关系数据库产品是Informix SE(StandardEngine)。InformixSE是在当时的微机Unix环境下主要的数据库产品。它也是第一个被移植到Linux上的商业数据库产品。

4. Sybase

Sybase公司成立于1984年,公司名称“Sybase”取自“system”和 “database” 相结合的含义。Sybase公司的创始人之一Bob Epstein 是Ingres 大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。公司的第一个关系数据库产品是1987年5月推出的Sybase SQLServer1.0。Sybase首先提出Client/Server 数据库体系结构的思想,并率先在Sybase SQLServer 中实现。

5. SQL Server

1987 年,微软和 IBM合作开发完成OS/2,IBM 在其销售的OS/2 ExtendedEdition 系统中绑定了OS/2Database Manager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase 签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server 1.0 版。

6. PostgreSQL

PostgreSQL 是一种特性非常齐全的自由软件的对象——关系性数据库管理系统(ORDBMS),它的很多特性是当今许多商业数据库的前身。PostgreSQL最早开始于BSD的Ingres项目。PostgreSQL 的特性覆盖了SQL-2/SQL-92和SQL-3。首先,它包括了可以说是目前世界上最丰富的数据类型的支持;其次,目前PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统.

7.mySQL

mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MySQL的官方网站的网址是:

java软件开发招聘可能会有哪些要求

1、参与系统整体的架构设计、数据设计,技术方案的讨论和决策;

2、独立完成系统模块的分析、设计,独立研发关键模块、关键算法的程序;

3、能够独立维护现有技术框架,进行技术攻坚,解决项目开发过程中的技术难4、对新系统或已有系统总体结构框架提出建设性的意见和建议。

能力要求:

1、精通J2EE\J2SE体系结构,熟悉主流J2EE框架springMVC、ehcache、mybatis、hibernate、velocity等;熟练使用ant/maven等构建工具;

2、有扎实的Java基础,在指定的需求下完成安排工作任务;

3、熟悉Linux/Apache/Nginx/PostgreSQ等基础服务的配置,优化和故障排查;

4、熟悉主流数据库系统的使用和优化,如:Postgresql、MySQL等;

5、有强烈的责任心和良好的沟通能力,能严格遵循编码规范和工作流程;

6、性格开朗,具有团队合作精神,学习能力强,能承受较大的工作压力;


当前文章:武汉postgresql的简单介绍
当前链接:http://scjbc.cn/article/dscdpjj.html

其他资讯