Sybase iAnywhere Sybase iAnywhere

无限企业的实现


不被限制的企业——iAnywhere中文博客

header image

SQL Anywhere® 11 的十大炫酷新功能(第五部分)

By Johnson Zhang on November 17th, 2008

作者BRECK CARTER

原文下载


4. 向后兼容性卷土重来

如果你拥有一个用版本 10 软件创建的数据库你可以利用 SQL Anywhere 11 来运行而无需重建数据库。这对于超大型数据库(VLDB)很重要你可以利用版本 11 来启动测试,而无需投入到耗时、不可逆向的重建工作。

 

当版本 10 推出时让人惊讶的是对于所有用之前版本创建的数据库而言,必须进行重建。对于版本 9 软件,用户习惯了这样一个事实,即它可与旧版的数据库文件一起使用,即使是版本 5.5 创建的数据库文件。版本 10 打破了兼容性规则,它这么做有正当的理由:为了换掉数据库引擎的大量遗留代码,减少代码所需的维护性工作,把时间花在更重要方面比如这些超酷的新功能。

 

版本 11 重新开启了新兼容规则当从版本 10 转向版本 11 时不需要任何的重建工作。对于比版本 10 更早的版本,例如说,如果你从版本 9 转向版本 11,则你仍然需要重建。

 

这是重要的一点如果性能对于你非常重要当你一决定从版本 10 转向版本 11 就立即进行数据库文件重建这仍然是非常明智的决定。为了充分利用版本 11 推出的新数据库文件格式所带来的改进性能,唯一途径是执行完全卸载并重装。

 

 

5. 使用PerlPHPC#VB编写储存过程

 

由于使用了 SQL Anywhere 版本 11你现在可以采用九种不同的语言编写存储过程新增加了 PerlPHPC# Visual Basic并且继续支持 JavaCC++ 和两种类型的 SQLANSI/Watcom Transact。实际上,支持的语言数量可能超过 9 种,例如 Fortran Net 2.0 CLR 版本也应当可以使用,只要你弄清楚技术支持语言中的应当可以使用其实可能是指你可能是第一个实际尝试使用的用户。

 

存储过程支持的细节因不同语言会有所不同,例如,VB 可以返回结果集,但 Perl 只能返回 LONG VARCHAR 字符串。

 

同样值得注意的是,现在利用非 SQL 语言编写的过程在与数据库服务器完全分离的可执行环境中运行。这意味着如果你的存储过程崩溃,它不会造成数据库也崩溃。再者,细节也有所不同,例如,每个连接都会配置一个外部 Perl 环境,但如果使用 VB,则只为每个数据库启动一个外部环境。

 

3 简短介绍了支持各种语言的差别。

external_procedure.jpg

3

语言支持的差别

 

 

安全调用不同语言编写的过程是一项非常重要任务几乎值得入选前十强排行榜。在那之前,C C++ 过程在数据库服务器内运行,如果你的代码出现异常,将酿成一场大灾难。可能不只是用户连接失败,而是会影响到每个人的服务器崩溃。

 

另一项重要的任务是是能够在非SQL语言的过程内部使用当前数据库的连接。换言之,在存储过程中调用的SQL语句不需要启动新的连接来传回数据库。在之前的版本中,即使你希望启动一个新的连接,CC++存储过程内部完全不支持发起任何 SQL 语句,而现在所有语言都可以使用相同的连接数据库访问。

 

这是炫酷的功能我已经获得一大串的代码我希望能够不费吹灰之力便能将它们嵌入数据库内以便实现数据来回传递。这里有一个例子:将文件比较实用程序的 API 嵌入其中,以便比较数据库内作为blob储存的文件,因此 SQL Anywhere 的嵌入式 HTTP 服务器可以通过 Web 服务调用从浏览器中显示比较结果。

P 请在您打印本内容之前认真考虑我们的生存环境保护。

→ No CommentsPosted in: SQL Anywhere

2008年Sybase大中华区用户大会精彩内容分享之Horace Chow主旨演讲

By Johnson Zhang on November 16th, 2008

在2008年Sybase大中华区用户大会上,亚太区副总裁兼大中华区总经理Horace Chow在大会上做的主旨演讲。

PPT如下:

→ No CommentsPosted in: Unwired Enterprise

2008年Sybase大中华区用户大会精彩内容分享之Steve Capelli主旨演讲

By Johnson Zhang on November 13th, 2008

Sybase公司运营总裁Steve Capelli先生在2008年Sybase大中华区用户大会上的主旨演讲。Steve主要与我们分享了Sybase在过去的一年中的巨大成功以及未来Sybase在大中华区的战略。

PPT如下:

Steve Capelli在2008GUCU上的致辞
View SlideShare presentation or Upload your own. (tags: sybase)

→ 1 CommentPosted in: Unwired Enterprise

SQL Anywhere® 11 的十大炫酷新功能(第四部分)

By Johnson Zhang on November 12th, 2008

作者BRECK CARTER

原文下载


 

3. 即时维护物化视图

 

下面是一个用于按部门创建员工名单的物化视图

 

CREATE MATERIALIZED VIEW DeptList AS

SELECT Departments.DepartmentID,

Employees.EmployeeID,

Departments.DepartmentName,

Employees.GivenName,

Employees.Surname,

Employees.Phone

FROM Departments

INNER JOIN Employees

ON Employees.DepartmentID = Departments.DepartmentID;

 

所有的物化视图在使用前必须经过初始化

 

REFRESH MATERIALIZED VIEW DeptList;

 

对于普通人工的物化视图如果你改变基础表数据但没有执行另一个 REFRESH你将看到旧数据

 

UPDATE Employees SET DepartmentID = 400 WHERE EmployeeID = 1336;

 

SELECT *

FROM DeptList

ORDER BY DepartmentName,

Surname,

GivenName;

 

DepartmentID          EmployeeID   DepartmentName     GivenName    Surname       Phone

============ ========== ============== ========= ======= ==========

300                        1336             Finance                   Janet            Bigelow         6175551493

 

SQL Anywhere 11 开始你可以更改视图这样对基础表的任何更新将立即被应用到物化视图储存的数据中以下是执行步骤

 

TRUNCATE TABLE DeptList;

 

CREATE UNIQUE INDEX xid ON DeptList (

DepartmentID,

EmployeeID );

 

ALTER MATERIALIZED VIEW DeptList IMMEDIATE REFRESH;

 

REFRESH MATERIALIZED VIEW DeptList;

 

如果已经在手动视图中填充了数据则需要先 TRUNCATE TABLE。该视图在更改为即时视图前必须立即清空。CREATE UNIQUE INDEX 是对即时视图的另一个要求:SQL Anywhere 在需要更新行时,必须能够定位到行。ALTER 语句将视图的刷新模式转变为 IMMEDIATE,同时需要一次性 REFRESH 来开始填充视图是的,这是一长串的步骤,但是你只需执行一次。

 

现在,如果你更新一个基表并查询视图,新数据便立即显示出来,无需其他显式的 REFRESH

 

UPDATE Employees SET DepartmentID = 400 WHERE EmployeeID = 1336;

 

SELECT *

FROM DeptList

ORDER BY DepartmentName,

Surname,

GivenName;

 

DepartmentID EmployeeID   DepartmentName     GivenNameSurname  Phone

============ ========== ============== ========= ======= ==========

400                                  1336                      Marketing                         Janet            Bigelow          6175551493

 

以下是物化视图超酷的真正理由你没有必要去了解视图存在有什么好处。尽管以下查询使用的是基表 2 显示了 SQL Anywhere 使用 DeptList 视图

 

SELECT Departments.DepartmentName,

Employees.GivenName,

Employees.Surname,

Employees.Phone

FROM Departments

INNER JOIN Employees

ON Employees.DepartmentID = Departments.DepartmentID;

 

sa11_instant_materialzed_view.jpg

2

自动使用的物化视图

→ No CommentsPosted in: SQL Anywhere

2008年Sybase大中华区用户大会精彩内容分享之程守宗先生致词

By Johnson Zhang on November 11th, 2008

2008年Sybase大中华区用户大会与2008年11月4日在北京召开,Sybase公司董事长、首席执行官兼总裁程守宗(John Chen)在大会上做了热情洋溢的欢迎辞。详见视频:

他介绍了Sybase强劲的增长情况,并向与会者分享了Sybase公司的三个战略:

  • 数据库
  • 移动中间件
  • 消息技术

→ No CommentsPosted in: Unwired Enterprise

SQL Anywhere® 11 的十大炫酷新功能(第三部分)

By Johnson Zhang on November 9th, 2008

作者BRECK CARTER

原文下载

2. FROM OPENSTRING

新的 OPENSTRING 子句让你在 SELECT 的一个 FROM 子句中命名一个文件或变量使 SQL Anywhere 将文件或变量内部的数据视为行和列的集合。这有点像通过 ODBC 远程访问中间件,使用代理表将一个文件视为一张表,但它更容易更加灵活,更不用说 OPENSTRING 让你可以既使用变量又可以使用文件。

 

这个功能也让我感到为难。起初,我认为它是新奇的 XML 内容之一,现在,“OPEN(开放)”一词确实让人对它的使用方式和过度使用感到不胜其烦。因此,我跳过 OPENSTRING 的思考,对啊,没错,现在我们随时都会开始说 OpenCorpse 这样的语句,而不说路上截杀 (roadkill) 了。

 

然后,以维基百科IvanAnywhere著称的 Ivan Bowman 使用下面这个示例改变了我的想法,在这个示例中将 OPENSTRING UNLOAD SELECT 一起并入一个变量。

我所质疑的一个灵活使用示例如下我在这里使用 SYSDOMAIN 只是为了说明例子):

 

CREATE VARIABLE @var LONG VARCHAR;

 

UNLOAD

SELECT *

FROM SYSDOMAIN

INTO VARIABLE @var;

 

CREATE VIEW V AS

SELECT *

FROM OPENSTRING ( VALUE @var ) WITH

( domain_id SMALLINT,

domain_num VARCHAR ( 128 ),

type_id SMALLINT,

“precision” SMALLINT )

AS T;

 

以上的代码是将结果集复制到一个连接级变量 @var然后使用一个视图 V 来参照结果集。你可以在连接过程内为 @var 创建一个值。

 

这可能是管理本地选项设置或对热点数据进行本地连接缓存的好方法避免连接至热点行。我想我们需要仔细注意如何使用它们,但它确实是一个值得你放在后备箱中的工具。你甚至可以在视图上创建一个 INSTEAD OF 触发器,使其看起来更像是一张表。

 

OPENSTRING 功能看起来也非常适合动态 IN 列表的某些情况其中 IN 列表被指定为一个字符串。它甚至允许使用并非由 SQL Anywhere 直接支持的多列式 IN 列表。

 

OPENSTRING LIST 结合时它也具有一些有趣的用途。它可能就像是一个横向连接(Lateral Join),将单个列的值变换为一个结果集。过去我使用 sa_splitlist() 完成了许多有趣的解决方案,而 OPENSTRING 现在涵盖了所有这些或更多解决方案,因为它不仅变换列,而且也变换行,其变换速度更快,它为处理更复杂的数据提供了更多的解析选项。

 

我很好奇这些新特性将在现实世界中发挥怎样的作用。

— Sybase iAnywhere 的杰出工程师 Ivan T. Bowman

 

但愿如此Ivan在最后一点上……难以预测用户将如何使用新功能。有时候,他们就像 LIST 函数一样大受欢迎,但有时候就像语法难题(即 ANSI 标准递归连接)那样一点都不受欢迎。我认为 OPENSTRING 可能成为最受欢迎的功能之一,同样还有 UNLOAD(卸载)到一个变量。

 

Ivan 提到了另一个最新功能该功能并未列入前十强排行榜因为它在版本 10.0.1 中没有大势宣扬。INSTEAD OF 触发器让你在表和视图上编写触发器以取代触发的操作。换言之,如果 INSTEAD OF INSERT ON T 触发器存在,当 INSERT T 语句执行时,它激发触发器,但是它并没有插入行。对于运行 INSERT T 之后你想要执行的任何操作,都必须在触发器内进行编码。

 

它酷的部分在于它让你在视图甚至是本身不可更新的视图上编写触发器。视图本身是否可更新并没有多大关系,因为如果相应的 INSTEAD OF 触发器存在,触发 INSERTUPDATE DELETE 的操作自身也不会执行插入、更新或删除,同时你还可以自由地在触发器内编写任何你想要执行的代码(除了 COMMIT 以外,当然,还是有限制的)。

P 请在您打印本内容之前认真考虑我们的生存环境保护。

 

→ No CommentsPosted in: SQL Anywhere

2008年Sybase大中华区用户大会圆满结束

By Johnson Zhang on November 6th, 2008

2008年Sybase大中华区用户大会在11月5日圆满结束了。精彩的内容将在后续不断与大家分享。先上几张大会上的照片,主要都是领导。这次的摄影师技艺精湛,效果非凡,他也是我们Sybase的同事。

john-chen-2008-gcuc-small.jpg

Sybase公司董事长、首席执行官兼总裁致欢迎辞(小图的效果比大图差了很多)

steve-capelli-2008-gcuc-small.jpg

Sybase公司全球运营总裁Steve Capelli介绍无限企业的愿景

raj-nathan-2008-gcuc-small.jpg

Sybase公司首席市场官Raj Nathan博士讲述IT系统的转折点

horace-chow-2008-gcuc-small.jpg

Sybase亚太区高级副总裁兼大中华区总经理邹作基讲述今天的Sybase中国

先把领导的图片上了。后续的精彩内容随后就奉送。

→ No CommentsPosted in: Unwired Enterprise

SQL Anywhere® 11 的十大炫酷新功能(第二部分)

By Johnson Zhang on November 5th, 2008


作者BRECK CARTER

原文下载

 

 

十大炫酷新功能

顺序并不重要……但选出十项功能就够难的了对它们进行排名并没有多大意义。

 

1. UNLOAD(卸载)到变量

LOAD UNLOAD 语句现在可以处理变量和文件。我的意思并不是只使用一个变量来保存文件定义,我指的是加载和卸载变量和文件中储存的数据。你可以将表的所有行和列 UNLOAD(卸载)到一个单一字符串变量里,反之亦然:把一个字符串 LOAD(加载)到一个表中:

 

BEGIN

DECLARE s LONG VARCHAR;

UNLOAD TABLE t1 TO s;

LOAD TABLE t2 FROM s;

END;

 

以下是使用变量替代文件的一些优点

提高并发性因为变量是连接的本地对象而文件则是全局对象。

提高灵活性因为 SQL Anywhere 拥有许多操作字符串的强大函数但是却没有那么多可操作文件的函数。

提高速度因为没有涉及到文件的 I/O 操作……但是不要得意忘形尝试用 UNLOAD LOAD 替代 INSERT SELECT这样并不会提高速度。

 

是的它可以与 UNLOAD SELECT UNLOAD TABLE 一起使用因此你可以编写查询以完全控制储存在变量中的内容。

 

这个功能使我感到非常为难多年来我一直在寻找当我第一次获得该功能时我却对它无从入手原因是在这期间其他功能已经可以解决我的问题其中最重要的是增强的 LIST 聚合功能。将 LIST STRING 函数与 LIST 分隔符和 ORDER BY 子句一起使用,可以完成针对集合的字符串处理。例如,你可以连接一些表,并利用单一 SELECT 将数据转换为格式化 HTML 网页。

 

我并不是一名顶尖的人才。因为某人给我提供一种新功能但我并未马上就能知道它的用途。LIST 是如此,UNLOAD(卸载)到一个变量更是如此。但是一旦有人给我指点,多好啊!我现在就可以完成冲刺!当 Ivan Bowman 指引我如何将这项新功能与排行榜中的下一个新功能结合起来时,事情就这样发生了。

P 请在您打印本内容之前认真考虑我们的生存环境保护。

→ No CommentsPosted in: SQL Anywhere

SQL Anywhere® 11 的十大炫酷新功能(第一部分)

By Johnson Zhang on September 23rd, 2008

作者BRECK CARTER

原文下载

概述
我刚在两年前给大家介绍了 SQL Anywhere 10 的大量功能,而今天 SQL Anywhere 11 又拥有了数量令人吃惊的新功能!本文向大家展示了SQL Anywhere 11中开发人员可能认为最有意思的“前十强”新功能。本文还描述了一些没有进入“前十强”排行榜的功能,包括可能对管理很重要但对于开发人员来说并不在意的功能。另外还包括一些别的功能,与其说它们奇妙,不如说是不可思议。

现在又到了 SQL Anywhere 奥斯卡颁奖时间,用户翘首期待自己喜爱的功能中有哪些能够最终入选,又有哪些功能被淘汰出局。想要看到一些新奇的内容……一切都尽在这里,SQL Anywhere 11 炫酷新功能的前十强榜单。

版本 11 的麻烦还是10
当 SQL Anywhere 10 在两年前发布时,我曾说过“10”这个数字本身就是一个大问题。从如此之多的新功能中挑选出十个功能进行讨论,这是一件非常困难的事情。

对 SQL Anywhere 11 而言,数字“10”仍然让我感到头疼,因为“我还在努力学习版本 10 的时候,现在版本 11 就已经出来了!”我认同版本 11 beta版论坛上贴出的这么一个请求:“请给我多一点时间”,以便领会所有的新内容。

这里举个例子说明一下 SQL Anywhere 更新换代有多么快。从我第一次利用 OPENXML,对超大的 XML 文件进行解析并直接加载到 SQL Anywhere 表中还没多长时间,其实这个功能自版本 9.0.1就问世了。当我在 4 月份发表一篇关于“如何使用 OPENXML”的文章后,它立刻成为我的 SQL Anywhere 博客中浏览量最多的页面,而且打那以后,它就一直如此。

还有另外一个例子:使用HTTP 会话来与SQL Anywhere 内置的 Web 服务器保持状态是版本 10 中的新功能,但上周我才刚刚了解如何使用这个功能。令人遗憾的是,它没有被列入我为版本 10 设立的“前十名”功能排行榜,这是个大错误…它确实非常酷!

尽管如此,版本 11 并没有版本 10 那么咄咄逼人,因此挑选前十强功能并不那么困难。但首先要说的是,有些人得知自己喜爱的功能名落孙山的时候,他们一定会暴跳如雷。

让某些人暴跳如雷的时刻

下面是一些没有被列入 SQL Anywhere 11 前十强排名榜的新功能。

支持 .NET 实体框架和LINQ 是一个重要的新功能,确实如此,但它不够酷,至少我是这么认为的。如果你准备使用关系数据库,那么你应当学习使用关系数据库的语言……即 SQL 语言,而并不是某种象 LINQ 这样的令人困惑的包装程序。不要试图告诉我,这是一条合理表述简单WHERE 子句的方法:Customer customer = this._db.Customers.Where( “it.ID = @ID”, new ObjectParameter( “ID”, id ) ).First();

全文检索和正则表达式是你可以用来替代 LIKE 谓词的两个新功能。第一个功能非常棒(全文检索),它进入了“前十强”功能排行榜,而正则表达式却落榜了。我需要花费很长的时间才能理解SELECT 语句中某些类似“(?<=new\s)york”这样的代码。”如果你已经了解正则表达式,你可能很高兴;但是,如果你开始担心可维护性,那你可能就会笑不出来了。

这里有一个功能,我想如果我漏掉了一定会后悔的:DCX 代表“DocCommentXchange”,它是“帮助”中指向一个网站超文本链接的虚拟名称,在这个网站上你能够读取其他人对各个主题的评论,你也可以发表自己的评论。DCX 界面看起来非常像“帮助”界面,因此当你单击一个链接时,你就会以为自己看见的就是帮助(见图 1):相同的主题、相同的布局、相同的内容、索引和搜索标签。新内容是各个主题的评论区,它向你显示其他人的评论,以及让你登录后发表自己的评论。新内容还有左边的“最新评论”标签。目前,dcx.sybase.com 网站在 SQL Anywhere 10 数据库上运行。不久以后,它将在 SQL Anywhere 11 上运行,并且不再使用 Apache 而改用内置的 HTTP 服务器,并使用 PHP 储存过程取代 PHP 客户服务器应用程序……它甚至还可能会用全文检索取代 LIKE。我希望它们都能全部实现,那样我就可以将 DCX 列入“前十强”功能排行榜了。

sa11-doc-exchange.jpg

图 1:
在 dcx.sybase.com 网站的 DocCommentXchange

这是另一个艰难的选择:UltraLite 的后台同步支持。这意味着,当你在手持设备上部署一大串代码时,你无需经过一番周折去设计一个应用程序,使你的用户在 MobiLink 同步正进行时,不必为同步过程而等待。你现在可以在第二个线程上启动同步,而 UltraLite 仅仅上传已经提交的更改;任何在那之后所做的更改将一直等待到下一个同步的开始。难道这就是说它酷的理由吗?对于我的第一个正在移植到新版本的客户而言,这正是他改用 SQL Anywhere 11 的第一理由。虽然不够格进入前十强功能排行榜,但值得在此一提。

以下是两种非常重要的内嵌功能:索引覆盖扫描和多重索引扫描:对于前者,如果在索引中找到了满足查询所需的数据,则 SQL Anywhere 甚至不会去查找表;对于后者,可以使用同一表中四个不同的索引来满足查询,而不是目前限制的一个表使用一个索引。一些查询由于有了这些功能会更快地运行,这就它们在这里值得一提的原因。由于它们属于内置的功能,这就是为什么它们没有入选前十名排行榜的原因…这就好比是,当用户在购买小型货车时,他们情愿看到车内的置杯架,而不愿去了解凸轮轴。

MySQL 可以用来做 MobiLink 同步设置中的统一数据库。我曾经说过,MobiLink 现在可以运行 MySQL。我确实不明白为什么用户会使用 MySQL,,它是配置和的管理噩梦,也是陷阱,让人不知所措,而且它并不免费,至少在你需要支持时是不免费的。然而,它很受欢迎。现在可以使用SQL Anywhere 来对 MySQL 执行自管理的远程数据库同步,使这些数据库通过 MobiLink 与你原有的 MySQL 数据库同步。谈到原有技术,MobiLink 现在还可以与主机上的 DB2 一起工作。它并不酷,除非它是你使用 SQL Anywhere 的入门途径。

SQL ANYWHERE 11 的奇妙和怪异

第一个怪异之处:Windows 上的 SQL Anywhere 可执行文件夹现在被称为“Bin32”,而不是“win32”。这意味着,如果你有包含诸如“%SQLANY10%\win32\…”这类路径的批处理文件,那么你将必须在两个位置更改它们:“%SQLANY11%\Bin32\…。”

现在在默认情况下都会安装“帮助”的“可打印手册”版本。这意味着,如果你不想要安装那些庞大的 PDF 文件,你必须在安装文件时选择“自定义”选项。“帮助”的常规编译 HTML 版本仍然存在,也一如继往地出色:所有手册都放在一个地方,还提供全文检索功能…那么谁还需要纸面文件?确实不可思议。

使用除 SQL 以外的语言编写储存过程的整体情况已得到大大扩展和改进,这是前十强炫酷新功能之一。不可思议的是,如果你选择的语言恰巧是 C 或 C++,当你阅读这一行时,你将变心灰意冷:“同样应当注意到的是,编译本机函数必须使用本机函数调用 API。”API 已经广泛使用了好长时间,它是已知编码领域的最可笑接口之一…它确实是太糟糕了,但我们还是必须使用它。但这仅针对 C 和 C++ 语言,并不适用于 Perl 或 PHP 或 Visual Basic 或其它的任何一种语言。API 至少还没有变得更糟糕。

INSTEAD OF 触发器是一项酷酷的最新功能,令人不可思议的是,工程师还没有为我们提供系统目录表的触发器。现在编写的应用程序越来越复杂,它们以动态方式操作模式对象,例如 CREATE TABLE,同时动态捕捉和跟踪那些变化的功能肯定会受欢迎。即使提供的系统目录触发器内部的代码可能只操作用户表,不能发起对模式的进一步的变更,但这样也能够满足 80% 以上的需求。我敢打赌,这将在改进可笑的本地函数调用 API 前发生。

P 请在您打印本内容之前认真考虑我们的生存环境保护。

→ No CommentsPosted in: SQL Anywhere

SQL Anywhere 11 数据库服务器新特性webcast上线

By Johnson Zhang on September 2nd, 2008

未现场参加的各位朋友可以点击此处查看本网络视频。

本网络视频密码为:27211737837。

如您第一次观看Sybase中国的网络视频,请先查看帮助

本Webcast简要介绍了SQL Anywhere 11的数据库服务器中比较重要的新特性和功能改进。

以下是本次Webcast的PPT。

SQL Anywhere 11 的 Server 新特性
View SlideShare presentation or Upload your own. (tags: sybase sql)

→ No CommentsPosted in: SQL Anywhere