Blogger Scott

#

解读数据存储ODS的概念

ODS是一个面向主题的、集成的、可变的、当前的细节数据集合,用于支持企业对于即时性的、操作性的、集成的全体信息的需求。常常被作为数据仓库的过渡,也是数据仓库项目的可选项之一。

根据Bill.Inmon的定义,“数据仓库是面向主题的、集成的、稳定的、随时间变化的,主要用于决策支持的数据库系统”

ODS是一个面向主题的、集成的、可变的、当前的细节数据集合,用于支持企业对于即时性的、操作性的、集成的全体信息的需 求。常常被作为数据仓库的过渡,也是数据仓库项目的可选项之一。

在Kimball的<<数据仓库生命周期工具集The Data WareHouse Liftcycle Toolkit>>,他是这样定义的:

1. 是操作型系统中的集成,用于当前,历史以及其它细节查询(业务系统的一部分)

2. 为决策支持提供当前细节数据(数据仓库的一部分)

因此操作数据存储(ODS) 是用于支持企业日常的全局应用的数据集合,ODS的数据具有面向主题、集成的、可变的和数据是当前的或是接近当前的4个基本特征。同样也可以看出ODS是介于DB和DW 之间的一种数据存储技术,和原来面向应用的分散的DB相比,ODS中的数据组织方式和数据仓库(DW)一样也是面向主题的和集成的,所以对进入ODS的数 据也象进入数据仓库的数据一样进行集成处理。另外ODS只是存放当前或接近当前的数据,如果需要的话还可以对ODS中的数据进行增、删和更新等操 作,虽然DW中的数据也是面向主题和集成的,但这些数据一般不进行修改,所以ODS和DW的区别主要体现数据的可变性、当前性、稳定性、汇总度上。

由于ODS仍然存储在普通的关系数据库中,出于性能、存储和备份恢复等数据库的角度以及对源数据库的性能影响角度,个人不建议ODS保存相当长周期的数据,同样ODS中的数据也尽量不做转换,而是原封不动地与业务数据库保持一致。即ODS只是业务数据库的一个备份或者映像,目的是为了使数据仓库的处理和决策支持要求与OLTP系统相隔离,减少决策支持要求对OLTP系统的影响。

为什么需要有一个ODS系统呢?一般在带有ODS的系统体系结构中,ODS都具备如下几个作用:

1)在业务系统和数据仓库之间形成一个隔离层。

一 般的数据仓库应用系统都具有非常复杂的数据来源,这些数据存放在不同的地理位置、不同的数据库、不同的应用之中,从这些业务系统对数据进行抽取并不是一件 容易的事。因此,ODS用于存放从业务系统直接抽取出来的数据,这些数据从数据结构、数据之间的逻辑关系上都与业务系统基本保持一致,因此在抽取过程中极 大降低了数据转化的复杂性,而主要关注数据抽取的接口、数据量大小、抽取方式等方面的问题。

2)转移一部分业务系统细节查询的功能

在 数据仓库建立之前,大量的报表、分析是由业务系统直接支持的,在一些比较复杂的报表生成过程中,对业务系统的运行产生相当大的压力。ODS的数据从粒度、 组织方式等各个方面都保持了与业务系统的一致,那么原来由业务系统产生的报表、细节数据的查询自然能够从ODS中进行,从而降低业务系统的查询压力。

3)完成数据仓库中不能完成的一些功能。

一般来说,带有ODS的数据仓库体系结构中,DW层所存储的数据都是进行汇总过的数据和运营指标,并不存储每笔交易产生的细节数据,但是在某些特殊的应用中,可能需要 对交易细节数据进行查询,这时就需要把细节数据查询的功能转移到ODS来完成,而且ODS的数据模型按照面向主题的方式进行存储,可以方便地支持多维分析 等查询功能。即数据仓库从宏观角度满足企业的决策支持要求,而ODS层则从微观角度反映细节交易数据或者低粒度的数据查询要求。

在一个没有ODS层的数据仓库应用系统体系结构中,数据仓库中存储的数据粒度是根据需要而确定的,但一般来说,最为细节的业务数据也是需要保留的,实际上 也就相当于ODS,但与ODS所不同的是,这时的细节数据不是“当前、不断变化的”数据,而是“历史的,不再变化的”数据。这样的数据仓库的存储压力和性能压力都是比较大的,因此对数据仓库的物理设计和逻辑设计提出了更高的要求。

posted @ 2007-11-08 11:18 江天部落格 阅读(198) | 评论 (0)编辑 收藏

JAVA面试-搞笑!

哈哈!!!
面试官:熟悉哪种语言
应聘者:Java。
面试官:知道什么叫类么
应聘者:我这人实在,工作努力,不知道什么叫累
面试官:知道什么是包?
应聘者:我这人实在  平常不带包 也不用公司准备了
面试官:知道什么是接口吗?
应聘者:我这个人工作认真。从来不找借口偷懒
M:知道什么是继承么
Y:我是孤儿没什么可以继承的
M:知道什么叫对象么?
M:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
M:知道多态么?
Y:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!
请问这和Java有什么关系??
面试官:用过 apache 的东西吗
应聘者:我修过车子
M:tomcat了解么
Y:小时看过。。现在也喜欢看
面试官:了解webwork吗
应聘者:不了解。我一直专注于本职工作,对外部的没有时间涉猎。
M:了解jakarta的哪些项目?
Y:不了解,我只去那儿旅游过。
M:用过bea的weblogic吗?
Y:没,只喝过蜂蜜。
M:了解SUN的创始人吗?
Y:不知道,不过我爆喜欢队中的纳什
M:用过spring么?
Y:没用过,发过。
M:知道Hibernate吗
Y:知道,动物冬天经常Hibernate,但我从来不冬眠
M:知道css吗?
Y:cs出加强版了?
M:OCR用作过没?
Y:我从不玩魔兽
M:W3C标准常用什么地方
Y:Lost Tample
M:知道REST么?
Y:我很勤奋,只知道干活,不知道休息。

posted @ 2007-05-28 10:58 江天部落格 阅读(375) | 评论 (0)编辑 收藏

Palm OS Developer Suite的安装和使用

终于买了一个掌上电脑,我又开始关注Palm开发了。Palm上虽然可以安装Java虚拟机,但据我所知绝大多数用户受里的Palm并没有安装,让他们为了用你的一个小软件而装虚拟机不太现实,因此只能用C/C++了。大学里学的C语言一直没有实际应用过,所以经过这么多年也和没学差不多,最近通过看wj给我的书,对C语言又有了重新的认识。不过C语言是面向过程的,我在Java里积累的经验似乎帮不上什么忙,边走边看吧。我在“Palm开发”这个分类里记录学习过程,这是第一篇,先介绍一下PODS的使用方法。

如果不熟悉Palm,可以先通过这篇文章了解一下Palm公司的历史和产品。没有掌上电脑也可以开发Palm应用,你可以在模拟器上运行和调试,但我相信把自己编写的应用程序拿在手里的感觉一定不错。

Palm OS Developer Suite(PODS)是PalmSource提供的基于Eclipse的Palm应用程序开发工具,它包含了编译工具、调试工具、模拟器、资源编辑工具和Palm SDK等等,可以在这个地址下载。虽然很多人都使用CodeWarrier开发Palm应用程序,但PODS毕竟是PalmSource官方推出的开发工具,从最初的1.0到现在的1.2版本看来,支持得也不错,加上它是基于我们熟悉的Eclipse平台,更重要的一点它是免费的,所以我还是选择了PODS。当然,用什么工具只能在一定程度上影响开发速度,熟练以后工具间的差别就不那么明显了。

我目前收集到的Palm开发资料主要有这几部分:首先是PalmSource网站上提供的不少pdf文档,对入门者比较有用的是“Palm OS Companion”和“Palm OS Reference”这两份,还有一个“UI Guideline”在设计窗体之前可以看看;另一个是PalmOS的开发者新闻组(news.palmos.com),比较活跃,到现在已经有超过10万个post了;最后就是纸版的图书,我找到的比较新的中文书籍是《PalmOS编程宝典(第二版)》,网上可以找到该书第一版的英文电子版,决定购买以前可以先看一下。

PODS的安装很简单:运行你下载的安装文件就可以了(PODS没有Linux的版本,它带的模拟器也是运行在Windows里的,所以我暂时还是要用回Windows了),可能需要你的机器里事先装有JRE。安装以后在“开始”菜单里会出现PODS组,其中有两个模拟器(Simulator,注意和Emulator的区别),开发OS5及以下应用程序用Garnet Simulator,开发OS6应用程序用Cobalt Simulator,所以我们一般用前者,它的样子见图1。


图1 Garnet模拟器

如果你用过Eclipse,对PODS的界面也不会感到陌生,基本上PODS就是在Eclipse里加了个透视图(Perspective)和一些向导,PODS 1.2版本带的Eclipse是3.0.1版本,显得有点过时了(也许可以把PODS那部分拿出来放在新版本Eclipse和CDT里,不知道能不能兼容),图2是PODS的运行界面。


图2 PODS的运行界面

环境看得差不多了,现在试着创建第一个Palm应用程序吧。在新建向导里创建“Managed Make 68K C/C++ Project”,如图3。这种应用程序可以运行在各个版本的Palm上,具有最好的兼容性。


图3 创建Palm应用程序

按下一步按钮,给项目起个名字“hello”,见图4。


图4 给项目起名

按下一步按钮,这里要指定你的应用程序的一些属性,对普通应用程序来说,大部分可以不动,只有“Creator ID”这一项必须改为其他值。按正规的流程,我们首先要在palmos网站上注册自己唯一的ID,然后把这个ID填在这里,目的是避免应用程序间的冲突。因为现在只是试验,随便改成“HELL”就可以了,见图5。


图5 修改Creator ID

按下一步按钮,在这一步里PODS提供了一些代码模板,这样可以不用从零开始写每个程序。我们选择“Sample Application”这一项,见图6,这样在向导结束后我们会得到一个很简单的应用程序。


图6 选择一个模板

现在直接按Finish按钮结束向导,这时要稍等一会儿,PODS在生成必要的代码和编译它们。简单来看一下生成的代码,主要的程序文件是src目录下的AppMain.c文件,注意它的入口方法不是main()而是PilotMain(),这个文件里的内容以后的帖子里会说明;在rsc目录下生成了名为AppResources.xrd的文件,这是一个资源文件,如果你在PODS里双击它,会打开Palm OS资源编辑器,见图7,在资源编辑器里你可以编辑窗体、定义菜单、定义图标、定义字符串等等。


图7 Palm OS资源编辑器

怎样在模拟器里运行这个应用程序呢?首先确认你已经启动了Garnet模拟器;然后在PODS里选择菜单“Run->Run...”,这将弹出一个对话框。在对话框左边选中“Palm OS Application”,然后按下面的New按钮,在“Palm OS Application”下面会出现一个新的节点(运行项);选中这个节点,在对话框右半部分把它的名称改为和项目名一样的“hello”,并确认“Files to install”框里只勾选了hello项目;点击Target属性页,在Device下拉列表里选择“Palm OS Garnet Simulator 5.4”,这个设置很重要,不要忽略。

现在运行项已经配置好了,见图8,按下对话框右下方的Run按钮即可运行程序。注意,以上这个过程对一个项目只需要配置一次就够了,再需要运行可以在PODS的工具栏里直接按Run下拉按钮。


图8 为hello项目配置运行项

我们第一个应用程序在模拟器上运行的界面如图9所示。


图9 第一个应用程序

你可能已经注意到了,在项目的Debug目录下已经生成了hello.prc文件,这个文件可以直接在Palm设备上运行(方法和安装其他软件一样,通过同步,或者复制到扩展卡上,等等),图10是我们的hello项目在真正的Palm上运行的样子。


图10 运行在Palm T|X上的hello项目




-----------------------------------------------------------------------------------------------------------------------
本文转自http://www.cnblogs.com/bjzhanghao/archive/2006/06/09/421821.html

posted @ 2007-04-23 22:31 江天部落格 阅读(486) | 评论 (0)编辑 收藏

名词解释:什么是RSS?

  讨论与Blog相关的技术,不可不谈的就是RSS,这个缩写在英文中可以有几个源头,并被不同的技术团体做不同的解释。既可以是“Rich Site Summary”,或“RDF Site Summary”,也可以是“Really Simple Syndication”。为什么有这么多含义呢?这还要从RSS的一段今天也没有理清的关系说起。

  今天肯定有人还记得IE 4刚刚推出来的时候有一个有趣的功能,那就是新闻频道。这个新闻频道的功能与Netscape推出的新闻频道是很相似的(当时Netscape还是市场上领先的浏览器)。为此Netscape 定义了一套描述新闻频道的语言,这就是RSS,只不过Netscape自当时起每况愈下,所以最终也没有发布一个正式的RSS规范(只发布了一个0.9版本)。而微软也在当时推出了支持自己IE的CDF(Channel Definition Format)数据规格,与RSS非常接近。微软试图用新闻频道的功能把“推”(Push)技术变成一个应用主流,并与Netscape抗衡。不过出乎预测的是,“推”技术自始至终没有找到合适的商业模型,而且伴随着其他各类网络特性的出现,也日益无法显现自身的优势。新闻频道在浏览器中的地位最终日暮西山,最后也在IE的后续版本中消失了。

  新闻频道的确进入了低谷,但是RSS并没有被业界人士所抛弃。过去两年,Blog从一个专业群体开始,逐步成为了网络上最热门的新话题。而RSS成为了描述Blog主题和更新信息的最基本方法。于是RSS这项技术被著名Blogger/Geek戴夫·温那(Dave Winner)的公司UserLand所接手,继续开发新的版本,以适应新的网络应用需要。新的网络应用就是Blog,因为戴夫·温那的努力,RSS升级到了0.91版,然后达到了0.92版,随后在各种Blog工具中得到了应用,并被众多的专业新闻站点所支持。在广泛的应用过程中,众多的专业人士认识到需要组织起来,把RSS发展成为一个通用的规范,并进一步标准化。一个联合小组根据W3C新一代的语义网技术RDF对RSS进行了重新定义,发布了RSS 1.0,并把RSS定义为“RDF Site Summary”。这项工作并没有与戴夫·温那进行有效的沟通,而戴夫则坚持在自己设想的方向上进一步开发RSS的后续版本,也并不承认RSS 1.0的有效性。RSS由此开始分化形成了RSS 0.9x/2.0和RSS 1.0两个阵营,也由此引起了在专业人群中的广泛争论。

  因为争论的存在,一直到今天,RSS 1.0还没有成为标准化组织的真正标准。而戴夫·温那却在2002年9月独自把RSS升级到了2.0版本,其中的定义完全是全新的模式,并没有任何RSS 1.0的影子。这引发了网络上进一步争议,究竟让一个越来越普及的数据格式成为一个开放的标准,还是被一家公司所定义和控制,成为了争议的焦点。戴夫·温那并没有为自己辩解,他的观点是RSS还需要进一步发展,需要专业人士更明确的定义,不过恐怕这种轻描淡写不能消除人们对RSS“被一家商业公司独占”的担心。

  前面的铺垫对用户来说也许没有什么太大的意义,可能更多人关心如何在自己的Blog增加RSS输出,这样可以让很多新闻聚合工具(例如CNBlog刚刚推荐的NewzCrawler)很容易找到你并自动获得你在Blog中的更新内容。

  它是什么:站点用来和其他站点之间共享内容的简易方式(也叫聚合内容)。 RSS使肵ML作为彼此共享内容的标准方式。

  它代表什么:Really Simple Syndication (或RDF Site Summary,RDF站点摘要)

  例如:一些免费的软件能够让你阅读那些RSS使能的站点,比如 NewsIsFree 和 Amphetadesk。

  它有什么用处:让别人容易的发现你已经更新了你的站点,让人们很容易的追踪他们阅读的所有weblogs。

  原文出处:博客中国

posted @ 2006-10-10 16:06 江天部落格 阅读(200) | 评论 (0)编辑 收藏

一位网友整理出来的网页播放器参数

这几天架设了一个电影服务器,研究了很久,现在把一些网页播放器的参数含义整理出来,你别说,就这些参数还折腾了我好长时间,现在终于解决了,感谢各位网友,把它整理处理,也是为了以后好用!

网页播放器的参数含义 Windows Media Player 网页播放器 参数含义

(默认0为否,-1或1为是)
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" width="286" height="225">
    <param name="AudioStream" value="-1">
    <param name="AutoSize" value="-1">
    <!--是否自动调整播放大小-->
    <param name="AutoStart" value="-1">
    <!--是否自动播放-->
    <param name="AnimationAtStart" value="-1">
    <param name="AllowScan" value="-1">
    <param name="AllowChangeDisplaySize" value="-1">
    <param name="AutoRewind" value="0">
    <param name="Balance" value="0">
    <!--左右声道平衡,最左-9640,最右9640-->
    <param name="BaseURL" value>
    <param name="BufferingTime" value="15">
    <!--缓冲时间-->
    <param name="CaptioningID" value>
    <param name="ClickToPlay" value="-1">
    <param name="CursorType" value="0">
    <param name="CurrentPosition" value="0">
    <!--当前播放进度 -1 表示不变,0表示开头 单位是秒,比如10表示从第10秒处开始播放,值必须是-1.0或大于等于0-->
    <param name="CurrentMarker" value="0">
    <param name="DefaultFrame" value>
    <param name="DisplayBackColor" value="0">
    <param name="DisplayForeColor" value="16777215">
    <param name="DisplayMode" value="0">
    <param name="DisplaySize" value="0">
    <!--视频1-50%, 0-100%, 2-200%,3-全屏 其它的值作0处理,小数则采用四舍五入然后按前的处理-->
    <param name="Enabled" value="-1">
    <param name="EnableContextMenu" value="-1">
    <!-是否用右键弹出菜单控制-->
    <param name="EnablePositionControls" value="-1">
    <param name="EnableFullScreenControls" value="-1">
    <param name="EnableTracker" value="-1">
    <!--是否允许拉动播放进度条到任意地方播放-->
    <param name="Filename" value="/blog/01.wma" valuetype="ref">
    <!--播放的文件地址-->
    <param name="InvokeURLs" value="-1">
    <param name="Language" value="-1">
    <param name="Mute" value="0">
    <!--是否静音-->
    <param name="PlayCount" value="10">
    <!--重复播放次数,0为始终重复-->
    <param name="PreviewMode" value="-1">
    <param name="Rate" value="1">
    <!--播放速率控制,1为正常,允许小数-->
    <param name="SAMIStyle" value>
    <!--SAMI样式-->
    <param name="SAMILang" value>
    <!--SAMI语言-->
    <param name="SAMIFilename" value>
    <!--字幕ID-->
    <param name="SelectionStart" value="-1">
    <param name="SelectionEnd" value="-1">
    <param name="SendOpenStateChangeEvents" value="-1">
    <param name="SendWarningEvents" value="-1">
    <param name="SendErrorEvents" value="-1">
    <param name="SendKeyboardEvents" value="0">
    <param name="SendMouseClickEvents" value="0">
    <param name="SendMouseMoveEvents" value="0">
    <param name="SendPlayStateChangeEvents" value="-1">
    <param name="ShowCaptioning" value="0">
    <!--是否显示字幕,为一块黑色,下面会有一大块黑色,一般不显示-->
    <param name="ShowControls" value="-1">
    <!--是否显示控制,比如播放,停止,暂停-->
    <param name="ShowAudioControls" value="-1">
    <!--是否显示音量控制-->
    <param name="ShowDisplay" value="0">
    <!--显示节目信息,比如版权等-->
    <param name="ShowGotoBar" value="0">
    <!--是否启用上下文菜单-->
    <param name="ShowPositionControls" value="-1">
    <!--是否显示往前往后及列表,如果显示一般也都是灰色不可控制-->
    <param name="ShowStatusBar" value="-1">
    <!--当前播放信息,显示是否正在播放,及总播放时间和当前播放到的时间-->
    <param name="ShowTracker" value="-1">
    <!--是否显示当前播放跟踪条,即当前的播放进度条-->
    <param name="TransparentAtStart" value="-1">
    <param name="VideoBorderWidth" value="0">
    <!--显示部的宽部,如果小于视频宽,则最小为视频宽,或者加大到指定值,并自动加大高度.此改变只改变四周的黑框大小,不改变视频大小-->
    <param name="VideoBorderColor" value="0">
    <!--显示黑色框的颜色, 为RGB值,比如ffff00为黄色-->
    <param name="VideoBorder3D" value="0">
    <param name="Volume" value="0">
    <!--音量大小,负值表示是当前音量的减值,值自动会取绝对值,最大为0,最小为-9640-->
    <param name="WindowlessVideo" value="0">
    <!--如果是0可以允许全屏,否则只能在窗口中查看-->
</object>

上面的这个播放器是老式的那种,6.4版本!新式播放器是在MediaPlayer9.0以后出现的,也就是说只有装了9.0或9.0以上的播放器才能正常使用的。

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

下面是新式播放器代码,相对以前的来说要简单很多:
<object id="player" height="64" width="260" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">
    <param NAME="AutoStart" VALUE="-1">
    <!--是否自动播放-->
    <param NAME="Balance" VALUE="0">
    <!--调整左右声道平衡,同上面旧播放器代码-->
    <param name="enabled" value="-1">
    <!--播放器是否可人为控制-->
    <param NAME="EnableContextMenu" VALUE="-1">
    <!--是否启用上下文菜单-->
    <param NAME="url" value="/blog/1.wma">
    <!--播放的文件地址-->
    <param NAME="PlayCount" VALUE="1">
    <!--播放次数控制,为整数-->
    <param name="rate" value="1">
    <!--播放速率控制,1为正常,允许小数,1.0-2.0-->
    <param name="currentPosition" value="0">
    <!--控件设置:当前位置-->
    <param name="currentMarker" value="0">
    <!--控件设置:当前标记-->
    <param name="defaultFrame" value="">
    <!--显示默认框架-->
    <param name="invokeURLs" value="0">
    <!--脚本命令设置:是否调用URL-->
    <param name="baseURL" value="">
    <!--脚本命令设置:被调用的URL-->
    <param name="stretchToFit" value="0">
    <!--是否按比例伸展-->
    <param name="volume" value="50">
    <!--默认声音大小0%-100%,50则为50%-->
    <param name="mute" value="0">
    <!--是否静音-->
    <param name="uiMode" value="mini">
    <!--播放器显示模式:Full显示全部;mini最简化;None不显示播放控制,只显示视频窗口;invisible全部不显示-->
    <param name="windowlessVideo" value="0">
    <!--如果是0可以允许全屏,否则只能在窗口中查看-->
    <param name="fullScreen" value="0">
    <!--开始播放是否自动全屏-->
    <param name="enableErrorDialogs" value="-1">
    <!--是否启用错误提示报告-->
    <param name="SAMIStyle" value>
    <!--SAMI样式-->
    <param name="SAMILang" value>
    <!--SAMI语言-->
    <param name="SAMIFilename" value>
    <!--字幕ID-->
</object>

Real Player 网页播放器 参数含义

参数:autostart 属性:True或是False 作用:指定是否自动播放指定的源文件
参数:backgroundcolor 属性:任何用符号“#”开头的16进制数值或是任何预定义的颜色作用:指定图像窗口的背景颜色
参数:center 属性:True或是False 作用:指定片断使用初始编码大小播放,并且在图像窗口的中央。
参数:classid 属性:"clsid:CFCDAA03-8BE4-1lcf-B84B0020AFBBCCFA:** 作用:用于指定ActiveX控件的唯一的字符串标示,可以认出嵌入的RealPalyer播放器。
参数:console 属性:任何字符串作用:可以将各种不同的RealPlayer控制聚集在网页上,这样它们可以交互使用或是保持独立,而且互相不影响
参数:controls 属性:ImageWindow,All,ControlPanel,PlavButton,PlayOnlyButton, PauseButton,StopButton,FFCtrl,RWCtrl,MuteCtrl,MuteVolume,VolumeSlider,PositionSlider,TACCtrl,HomeCtrl,InfoVolumePanel,InfoPanel,StatusBar,StatusField,PositionField 作用:可以让你指定那些控制是可见的。
参数:height 属性:任何整数值作用:指定RealPlayer元素的高度,单位:像素
参数:id 属性:任何字符串作用:为标签中的RealPlayer元素指定名字。
参数:imagestatus 属性:True或是False 作用:指定是否在图像窗口中显示状态信息,默认值是true
参数:loop 属性:True或是False 作用:可以让你指定片断是否无限循环
参数:maintainaspect 属性:True或是False 作用:默认RealPlayer拉伸所有的片断来充满整个图像窗口。
参数:name 属性:任何字符串作用:为标签中的RealPlayer元素指定名字(在标签中使用id)
参数:nojava 属性:True或是False 作用:避免启动Java虚拟机
参数:nolabels 属性:True或是False 作用:可以禁止显示标题或是版权信息(realplayer5.0以上时,它是垃圾...)
参数:nologo 属性:True或是False 作用:避免RealPlayer启动时在图像窗口中显示
参数:numloop 属性:任何整数值作用:让你能够指定文件片循环的次数,不需要参数loop
参数:prefetch 属性:True或是False 作用:指定在播放前,RealPlayer是否可以获得流描述信息,默认值是False
参数:region 属性:任何字符串作用:同SMIL一起使用。允许你指定使用HTML代替SMIL
参数:scriptcallbacks 属性:用逗号分割的列表作用:指定浏览器的回调监控(好高级的东东!)
参数:shuffle 属性:True或是False 作用:同多文件片的ram文件或是SMIL文件一起使用。可以让RealPlayer随机播放列表中的文件
参数:src 属性:任何合法的相对或是完整的URL 作用:指定播放的文件或是源文件的地址
参数:type 属性:字符串作用:为嵌入插件指定MIME类型
参数:width 属性:任何整数值作用:指定RealPlayer元素的宽度

controls的属性含义...

组件:imagewindow
作用:视频显示区域

组件:All
作用:嵌入RealPlaver的所有按钮、滑动条和信息面板

组件:ControlPanel
作用:显示所有的控制按钮,以及位置滑动条和扬声器图标,和调节声音大小的滑动条

组件:PlayButton
作用:显示播放(play)按钮和暂停(pause)按钮

组件:PlayOnlyButton
作用:仅显示播放按钮

组件:PauseButton
作用:仅显示暂停按钮

组件:StopButton
作用:仅显示停止(stop)按钮

组件:FFCtrl
作用:仅显示快进(fastforward)按钮

组件:RWCtrl
作用:仅显示回放(rewind)按钮

组件:MuteCtrl
作用:仅显示扬声器图标,用作静音按钮

组件:MuteVolume
作用:显示小的扬声器图标(用于静音)和其上的用于调节音量的滑动条

组件:VolumeSlider
作用:仅显示竖直的音量滑动条

组件:PositionSlider
作用:显示水平的位置滑动条

组件:tacctrl
作用:显示水平的消息框,轮流显示标题、作者以及版权信息

组件:HomeCtrl
作用:显示小的Real标识

组件:infoVolumePanel
作用:显示黑的消息框,用绿色显示标题、作者以及版权信息,在右手方有扬声器图标和声音调节滑动条

组件:infoPanel
作用:同上面一样,但是没有静音按钮和声音调节滑动条

组件:StatusBar
作用:显示水平的消息框,显示片断信息,比如片断的时间,网络状况等等

组件:StatusField
作用:同StatusBar类似,但是只显示消息区域,显示网络消息,比如显示“Re-buffenng...”

组件:PositionField
作用:小的黑的消息框,显示整个文件片断长度以及当前帧在片内的位置

嵌入RealOne播放器
<object ID="rPlayer" CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" HEIGHT="100%" WIDTH="100%">
<param name="_ExtentX" value="23627">
<param name="_ExtentY" value="15187">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="0">
<param name="SRC" value="http://www.blogerhome.com/address.asp?num=24009987&id=10019">
<param name="CONTROLS" value="ImageWindow">
<param name="CONSOLE" value="Clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object>
嵌入MediaPlayer播放器
<object id="MediaPlayer" width="478" height="300" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.
cab#Version=6,1,5,217" type="application/x-oleobject" standby="Loading Microsoft Windows Media Player components..." classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" VIEWASTEXT>
<param name="DisplayBackColor" value="0">
<param name="DisplayForeColor" value="16777215">
<param name="DisplayMode" value="0">
<param name="DisplaySize" value="-1">
<param name="Filename" value="mms://www.webjx.com/视频文件.wmv">
<!-- 此处设置播放的视频连接 -->
<param name="ShowControls" value="0">
</object>

RealPlayer的一些函数、方法和过程

这是 Real Player ActiveX Control Library (Version 1.0) 的所有函数与方法,有兴趣可以研究一下。

function GetSource: WideString;
procedure SetSource(const lpszNewValue: WideString);
function GetConsole: WideString;
procedure SetConsole(const lpszNewValue: WideString);
function GetControls: WideString;
procedure SetControls(const lpszNewValue: WideString);
function GetNoLabels: WordBool;
procedure SetNoLabels(bNewValue: WordBool);
function GetAutoStart: WordBool;
procedure SetAutoStart(bNewValue: WordBool);
function GetAutoGotoURL: WordBool;
procedure SetAutoGotoURL(bNewValue: WordBool);
function GetVolume: Smallint;
procedure SetVolume(nVol: Smallint);
function GetMute: WordBool;
procedure SetMute(bMute: WordBool);
function GetLoop: WordBool;
procedure SetLoop(bVal: WordBool);
function GetImageStatus: WordBool;
procedure SetImageStatus(bEnable: WordBool);
function GetPacketsTotal: Integer;
function GetPacketsReceived: Integer;
function GetPacketsOutOfOrder: Integer;
function GetPacketsMissing: Integer;
function GetPacketsEarly: Integer;
function GetPacketsLate: Integer;
function GetBandwidthAverage: Integer;
function GetBandwidthCurrent: Integer;
procedure DoPlayPause;
procedure DoStop;
procedure DoNextItem;
procedure DoPrevItem;
function CanPlayPause: WordBool;
function CanStop: WordBool;
function HasNextItem: WordBool;
function HasPrevItem: WordBool;
function HasNextEntry: WordBool;
function HasPrevEntry: WordBool;
procedure DoNextEntry;
procedure DoPrevEntry;
procedure AboutBox;
procedure EditPreferences;
procedure HideShowStatistics;
function IsStatisticsVisible: WordBool;
procedure DoGotoURL(const url: WideString; const target: WideString);
procedure DoPlay;
procedure DoPause;
function GetPosition: Integer;
function GetPlayState: Integer;
function GetLength: Integer;
function GetTitle: WideString;
function GetAuthor: WideString;
function GetCopyright: WideString;
function GetClipWidth: Integer;
function GetClipHeight: Integer;
function CanPlay: WordBool;
function CanPause: WordBool;
procedure SetPosition(lPosition: Integer);
function GetNumLoop: Integer;
procedure SetNumLoop(lVal: Integer);
function GetCenter: WordBool;
procedure SetCenter(bVal: WordBool);
function GetNoLogo: WordBool;
procedure SetNoLogo(bVal: WordBool);
function GetMaintainAspect: WordBool;
procedure SetMaintainAspect(bVal: WordBool);
function GetBackgroundColor: WideString;
procedure SetBackgroundColor(const pVal: WideString);
function GetStereoState: WordBool;
function GetLiveState: WordBool;
function GetShowStatistics: WordBool;
procedure SetShowStatistics(bVal: WordBool);
function GetShowPreferences: WordBool;
procedure SetShowPreferences(bVal: WordBool);
function GetShowAbout: WordBool;
procedure SetShowAbout(bVal: WordBool);
function GetOriginalSize: WordBool;
procedure SetOriginalSize;
function GetDoubleSize: WordBool;
procedure SetDoubleSize;
function GetFullScreen: WordBool;
procedure SetFullScreen;
function GetEnableContextMenu: WordBool;
procedure SetEnableContextMenu(bVal: WordBool);
function GetEnableOriginalSize: WordBool;
procedure SetEnableOriginalSize(bVal: WordBool);
function GetEnableDoubleSize: WordBool;
procedure SetEnableDoubleSize(bVal: WordBool);
function GetEnableFullScreen: WordBool;
procedure SetEnableFullScreen(bVal: WordBool);
function GetEnableMessageBox: WordBool;
procedure SetEnableMessageBox(bVal: WordBool);
procedure SetTitle(const pVal: WideString);
procedure SetAuthor(const pVal: WideString);
procedure SetCopyright(const pVal: WideString);
function GetWantKeyboardEvents: WordBool;
procedure SetWantKeyboardEvents(bWantsEvents: WordBool);
function GetWantMouseEvents: WordBool;
procedure SetWantMouseEvents(bWantsEvents: WordBool);
function GetNumEntries: Smallint;
function GetCurrentEntry: Smallint;
function GetEntryTitle(uEntryIndex: Smallint): WideString;
function GetEntryAuthor(uEntryIndex: Smallint): WideString;
function GetEntryCopyright(uEntryIndex: Smallint): WideString;
function GetEntryAbstract(uEntryIndex: Smallint): WideString;
procedure SetCanSeek(bCanSeek: WordBool);
function GetCanSeek: WordBool;
function GetBufferingTimeElapsed: Integer;
function GetBufferingTimeRemaining: Integer;
function GetConnectionBandwidth: Integer;
function GetPreferedLanguageString: WideString;
function GetPreferedLanguageID: Integer;
function GetUserCountryID: Integer;
function GetNumSources: Smallint;
function GetSourceTransport(nSourceNum: Smallint): WideString;
function GetWantErrors: WordBool;
procedure SetWantErrors(bVal: WordBool);
function GetShuffle: WordBool;
procedure SetShuffle(bVal: WordBool);
function GetVersionInfo: WideString;
function GetLastMessage: WideString;
function GetLastErrorSeverity: Integer;
function GetLastErrorRMACode: Integer;
function GetLastErrorUserCode: Integer;
function GetLastErrorUserString: WideString;
function GetLastErrorMoreInfoURL: WideString;
procedure SetPreFetch(bVal: WordBool);
function GetPreFetch: WordBool;
procedure SetRegion(const pVal: WideString);
function GetRegion: WideString;
function GetIsPlus: WordBool;
function GetConsoleEvents: WordBool;
procedure SetConsoleEvents(bVal: WordBool);
function GetDRMInfo(const pVal: WideString): WideString;
property ControlInterface: IRealAudio read GetControlInterface;
property DefaultInterface: IRealAudio read GetControlInterface;

posted @ 2006-10-10 11:37 江天部落格 阅读(375) | 评论 (0)编辑 收藏

飞扬青春,绚丽◎◎——我与◎◎周年回顾

        转眼一载已逝,回想去年刚踏进公司的那个新的起点,到一年后的今天,是一个积累美好回忆的过程,也是一个自我成长的过程。

        这种积累是从◎◎的新员工培训开始。大家富有个性的自我介绍、课堂上踊跃和富有建设性的提问和发言,无不给人深深留下一种朝气蓬勃、青春飞扬的记忆。公司领导耐心细致的回答、针对各种问题的讨论、对公司过去的辉煌以及未来的畅想也给我留下了深刻的印象,在我的心中形成了一幅令人振奋的美好愿景。

        拓展训练中各种有趣的、赋有挑战性的游戏,让我们在放松、欢笑的背后了解到了团队的力量,并增进了彼此的了解。在快乐安静下来之后,我深深的感受到公司对我们的爱护和为培养我们所付出的良苦用心。我暗自庆幸,当初的选择是正确的。我想我是幸运的,而且每个和我一同进入公司的人也都是幸运的。

        为期近3个月的入职实习和培训后,我们各自回到了自己的岗位投入了紧张的工作中,由于我所在的◎◎◎◎◎◎成立时间不长,很多方面的工作都处在起步阶段,在刚到◎◎◎◎没多久,领导就提出了建设一个自有◎◎◎◎平台的设想,出于自己的兴趣和领导的信任,我有幸参与了该平台的建设工作,从平台的设计、选型、建设施工到开始加载第一个◎◎,我一路陪伴着平台从设计文档变成推向市场的一个个◎◎。期间虽然经历过一些坎坷,碰到过一些困难,但是在领导的耐心指导和大家的群策群力下(非常感谢各位领导、本部门以及外部门的同事们),最终还是取得了很多成绩。目前,该平台已承载了多项个人◎◎◎◎◎◎的运行,并对◎◎◎◎的营销支撑做出了贡献。

        在今年三月,我的工作职责由产品开发调整到了产品营销支撑和执行。岗位的调整带来了很多的挑战,因为新的岗位有着很多未知;岗位的调整也带来很多机遇,因为我获得了新的锻炼和成长的机会。在新的岗位上,时间是最重要的关键词,营销工作尤其是营销支撑和执行工作是在与时间赛跑,支撑主动化、执行模式化等举措都是为了提高工作效率、提高反应速度。

        在紧张工作的同时,公司对我们的培养也是从不间断的。学分制的素质培训、3◎培训、项目管理培训以及各种与本职工作相关的技能培训,使我们在经验积累的同时能及时得到理论的提高,理论知识在工作中又能立即得以应用,这种理论联系实际的学习方式使我受益匪浅。

        过去的一年已经过去,新的一年还会继续。我有一个梦想,希望每一天都在成长,希望每一天都青春飞扬,因为人生会因此而绚丽。想起一位同是05级同事说过的话,◎◎◎◎是我们放飞梦想的地方。

posted @ 2006-09-29 03:20 江天部落格 阅读(208) | 评论 (0)编辑 收藏

如何在windows系统下安装MySQL

 

可以运行在本地windows版本的MySQL数据库程序自从3.21版以后已经可以从MySQL AB公司获得,而且 MYSQL每日的下载百分比非常大.这部分描述在windows上安装MySQL的过程. 安装程序是针对windows版本的MySQL 5.0,结合了图形安装向导,自动的安装MySQL,创建 一个配置文件,启动服务器,和保护默认的用户帐户. 如果你是升级安装现有的MySQL 4.1.5版本.你必须完成下列步骤:

1. 获得和安装 
2. 如果有必要安装配置文件 
3. 选择一个想要使用的服务器. 
4. 启动服务器 
5. 为MYSQL帐户设置密码. 
这个过程在没有安装配置的myslq安装程序里完成. 
MySQL 5.0 for Windows 可用的种格式:
· 包含二进制的安装程序可以安装所有你需要的依次你可以立即启动服务器. 
· 原始类包括所有代码和支持文件建造执行使用Visual Studio 2003编译系统.

一般来讲,你应该使用二进制形式.较其他比较简单,和你不需要额外的工具让mysql使用 和运行. 本文主要描述怎样在windows上安装使用二进制格式的MYSQL.

一、要在WINDOWS上运行MYSQL,你要具备下列条件:

· 一个32位WINDOWS操作系统,9x,ME,NT,2000,XP,或者 windows server2003.基于 WINDOWS NT操作系统(NT,2000,XP,2003)允许你运行MYSQL 服务器为一个服务.使用基于 WINDOWS NT操作系统是我们强烈推荐的.

· TCP/IP协议支持. · 二进制版本的MYSQL for windows,可以从 http://dev.mysql.com/downloads/下 载。注意: 如果你通过FTP下载.我们推荐使用适当的FTP软件很重要.避免在现在过程中文件 损坏..

· 一个可以打开.zip 文件的工具,用来打开安装文件

· 硬盘的空间推荐最小200M. 如果准备通过ODBC连接MYSQL,你也需要ODBC连接驱动

· 你过你需要的表大于4GB,安装MYSQL在NTFS或者新的文件系统上.当你创建表的时不 要忘记使用 MAX-ROWS和AVG_ROW_LENGTH.

二、选择一个安装组件

对于MYSQL 5.0,有三个组件用来选择安装MYSQL在WINDOWS上.下列是组件:

· 基本组件:这个组件有一个类似于mysql-essential-5.0.13-rc-win32.msi和包含最 小需求文件组件不包含可选组件与内含的服务器和基准组件

· 全部组件:这个组件有一个文件名类似 mysql-5.0.13-rc-win32.zip和包含所有可需 文件来完成WINDOWS安装.包括配置向导.这个组件包括可选组件与内含的服务器和基准 组件

· 无安装存档:. 这个组件有一个类似于mysql-noinstall-5.0.13-rc-win32.zip的文 件名和包含建立完成安装组件的文件.配置向导除外.这个组件不包含自动安装,必须手 动安装和配置.大多数拥护推荐使用基本组件.

三、使用配置向导

MySQL配置向导可以帮助您实现WINDOWS系统下的服务器自动配置。MySQL配置向导首先会根据一一系列的问题创 建一个定制好的my.ini文件,然后根据填写内容并将其应用到模板中从而产生一个跟安装相适应的my.ini文件 。配置向导包含在MySQL 5.0服务器中,现在只适合WINDOWS用户。配置向导很大程度上来源于用户近几年在My SQL AB上的反馈信息。如果你觉得向导内容缺少你所需要的重要内 容,或者,你发现有错误,请通过MySQL 错误报告系统要求添加新特性或报告错误信息。

安装完毕后可以直接进入配置向导或通过点击WINDOWS开始程序中的MySQL服务器实例向导进入MySQL配置向导。 另外,也可以找到MySQL安装目录下的bin目录下的MySQLInstanceConfig.exe文件并直接运行它。

如果你的MySQL配置向导发现了一个已经存在的my.ini文件,你可以重新配置已经存在的服务器,或者通过删除 my.ini文件、停止并移除MySQL服务的方法移除服务器实例。重新配置已经存在的服务器,选择“重新配置实例”选项并且选择“下一步”按钮。已经存在的my.ini文件被 重新命名为mytimestamp.ini.bak,时间戳是已经存在的my.ini创建时的日期和时间。移除已经存在的数据库实 例,选择“移除实例”选项并选择“下一步”按钮。如果选择了“移除实例”选项,进入到确认界面。单击“运行”按钮:MySQL配置向导停止并开始移除MySQL服 务,并删除my.ini文件。但服务器安装目录并没有移除。如果选择了“重新配置实例”选项,进入到“配置类型”界面,可以选择安装想要配置的安装类型。

选择了MySQL配置向导的 “安装MySQL”,或“重新配置实例”,都将进入到“配置类型”界面有两个配置类型可供选择:详细配置和标准配置。标准配置选项是为那些不需要考虑复杂服务器配置的新手而 设计的。详细配置选项是给那些能更高好的操作服务器的高级用户使用的。如果您刚开始使用MySQL,并且把它做为一个单一用户的开发机器使用的话,标准配置能满足您的需求。选择标 准配置后,除了服务选项和安全选项外配置向导对其他部分都做了自动配置。如果你的机器中有已经安装了MySQL,标准配置可能不太适合你的系统。如果愿意进一步配置的话,“详细配置 ”选项是推荐的。

然后进入服务器类型页面,有三种不同的服务器类型可供选择,选择服务器类型后配置向导将会根据选择的不同确定内存、磁盘、处理器 的使用。

• 开发版:这个选项是典型的桌面工作站,是MySQL为个人使用而设计的。有很多其他的桌面应用程序也 可以在此上运行。MySQL服务器使用了最小的系统资源。

• 服务器版:选择此选项MySQL可以和其他一些服务器应用程序如FTP,email,Web服务同时运行。MySQL 服务器配置使用了中等程度的系统资源。

• MySQL服务器专业版:这个选项是只能运行MySQL服务器,其他应用程序不可以运行。MySQL服务器配置 将使用所有可用资源。

“数据库使用”界面允许在创建MySQL表时可以指示想使用的表操作。选择项将决定InnoDB存储引擎是否可用, InnoDB所能使用系统资源的百分比。多功能的数据库:此选项InnoDB 和 MyISAM存储引擎可用,并且在两者之间平均分配资源。推荐在通常情况下 会使用这两个存储引擎的的用户使用。事务型数据库:此选项InnoDB 和 MyISAM存储引擎均可用,但更倾向于系统大部门资源为InnoDB存储引擎所使 用。推荐经常使用InnoDB而很少使用MyISAM的用户使用。

• 非事务型数据库:此选项完全禁止InnoDB存储引擎,完全专注于MyISAM存储引擎。推荐不使用InnoDB 的用户使用。

InnoDB表空间界面

有些用户更愿意将InnoDB表空间文件放在不同的位置而不是MySQL服务器数据目录。如果系统有更高的存储能力 或更高性能的存储设备可用,比如RAID存储系统,可以把表空间文件放置在不同的位置。可以修改InnoDB表空间文件的默认位置,从下拉列表框的盘符列表中选择一个并选择一个新的路径。创建定制 的路径,单击“...”。 如果修改已经存在的服务器配置,在修改路径之前必须单击“修改”按钮。在启动服务器之前必须先手工把已 经存在的表空间文件移到新的位置。

并发连接界面

控制连接到MySQL服务器的并发连接数目能有效的防止耗进系统资源。并发连接界面允许选择服务器按所需选择 服务器的使用情况, 并同时设置并发连接限制。也可以手工设定并发连接数。

• 决策支持(DSS)/联机分析处理(OLAP):服务器不要求大数目的并发连接时选择此项。最大连接数 目的连接可达100,但平均会有20个并发连接。

• 在线事务处理(OLTP):服务器要求大数量的并发连接时选择此项。最大连接数可达500。

• 手工设置:选择此项可以手工设置并发访问服务器的最大树木。从下拉列表框中选择最大可连接数, 如果下拉列表框中列出的数目没有可选择的。可手工输入最大连接数目。

网络配置选项对话框

可以使用网络配置对话框来激活或者禁止TCP/IP网络服务同时配置和MySQL服务器连接的端口号。TCP/IP网络服 务是默认激活的。Windows可以通过不选择TCP/IP网络选项的选项框禁止TCP/IP网络服务。通常默认使用的端口 是3306。如果需要改变访问MySQL的端口,可以从下拉选项框中选取新的端口号或者在选项框中直接输入新的端 口号。如果你选定的端口号已经被使用,系统将会提示你去确认对端口号的选择。

字体设置对话框

MySQL服务器支持多字体设置,同时可以为服务器设置默认服务字体,该字体可以应用于所有的数据表、列和未 被超级控制的数据库。可以使用字体设置对话框来改变MySQL服务器的默认字体设置。

1 标准的字体设置:该选项用于将Latin1作为默认的服务字体. Latin1可以用于英文和众多西文字体。

2 对于多语言字体的最佳支持:该选项用于UTF8作为默认的服务字体。在单一的字体设置中,UTF8可以存储来自 很多不同语言的字体。

3 手动选择默认字符设置/排序:该选项用于手动设置默认字体。你可以从下拉选择框所提供的字体中选择所需 要的字符。

服务选择对话框

在基于Windows NT的平台上,MySQL服务器可以被作为Windows的一项服务被安装。当作为一项服务安装时, MySQL服务器可以随着系统的启动而自启动,并且在服务失败时,MySQL服务器可以自动重起。在MySQL的默认配置中,将MySQL服务器作为服务安装,同时该服务的名称为MySQL。如果你不希望安装该项服务 ,不选择作为Windows服务的选择框即可。你可以从所提供的下拉选择框中选取一个新的服务名称或者直接在下 拉选择框中输入新的服务名称。如果需要将MySQL服务器作为一项服务来安装,同时使MySQL不随着系统启动而自启动,则不选择自启动Mysql服 务选择框。

安全选择对话框

强烈推荐你为你的MySQL服务器设置一个相应的根用户密码,同时MySQL配置向导需要你设置一个默认的根用户 密码。如果你不希望设置根用户密码,则不要选择修改安全设置选项。为了设置根用户密码,需要将设定的根 用户密码同时输入新根密码和确认选择框里。如果你需要重新配置一个已存在的服务器,你需要将其的根用户 密码输入到当前的根密码选择框里。为了防止通过网络的根用户登录,可以在Root的选择框中设置为只允许从本地连接。这将增强你的根用户的安 全性。为了生成一个匿名用户帐户,选择生成匿名帐户的选择框。生成一个匿名用户帐号可能会降低服务器的安全性 ,同时造成登陆和认证的困难。出于这种原因,该选项一般不被推荐。

确认对话框

MySQL配置向导中的最后的对话框是确认对话框。可以点击“执行”按钮来启动配置操作。为了返回到前一个对 话框,可以点击“返回”按钮。可以点击“取消”按钮退出MySQL配置向导而无需配置服务器。当你点击“执行”按钮后而无需配置服务器,MySQL配置向导执行一系列任务,该任务在被执行时,执行进度将 会被显示在屏幕上。 MySQL配置向导首先使用由MySQL AB开发者和工程师所准备的模版配置文件来决定基于你的选择的配置文件选项 。该模版被命名为my-template.ini,同时位于你的服务期安装目录下。MySQL配置向导将这些选择项写入至 my.ini文件中。my.ini文件的最终位置将会被显示在写配置文件任务中。如果你选择为MySQL服务器生成一项服务,MySQL配置向导将会生成并启动该服务。如果你正在重新配置一个已 存在的服务,MySQL服务向导将会重起服务以重新应用改变的配置。如果你选择设置一个根密码,MySQL配置向导将会和服务器连接,设置你的新的根用户密码同时应用你已经选择 的其他安全设置。在MySQL配置向导完成其的任务后,一个摘要将会被显示出来。点击“结束”按钮退出MySQL配置向导。

配置文件my.ini的位置

MySQL配置向导将my.ini文件放置在MySQL服务器的安装目录中。这将有助于将配置文件和具体的服务器实例相 关联。为了保证MySQL服务器知道到哪里查找my.ini文件,和下面内容类似的参数将会被作为服务安装的一部分 传递给MySQL服务器:--defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini C:\Program Files\MySQL\MySQL Server 5.0可以被指向MySQL服务器的安装路径所代替。

编辑my.ini文件

可以使用文本编辑器打开该文件同时做出必要的编辑和修改。你也可以以MySQL Administrator的应用程序来修 改服务器配置。 MySQL客户端和应用程序,例如mysql命令行客户端和mysqldump并不能确定位于服务器安装目录中的my.ini文件 的位置。为了配置客户端和应用程序,根据你的Windows版本的不同,在C:\Windows下或者在C:\WINNT目录下生 成新的文件my.ini 文件

四、从Noinstall Zip Archive中安装MySQL

正在从Noinstall软件包安装MySQL的用户可以使用这个说明来手动安装MySQL。从Zip archive 中安装MySQL的 步骤如下:

  1 在指定的安装目录下解压软件包。
  2 制造选择文件。
  3 选择MySQL服务类型。
  4 开始MySQL服务。
  5 保护默认账户。
解压安装软件包

为了手工安装MySQL,需要按以下步骤进行:

1 如果你需要对以前的版本更新,请参考在更新步骤刚开始时的文章 “Upgrading MySQL on Windows”。

2 如果你正在使用基于Windows NT的操作系统例如Windows NT, Windows 2000, Windows XP或者Windows Server 2003,必须保证你作为拥有管理员特权的用户登录该系统。

3 选择一个安装位置。传统的MySQL服务器安装在 C:\mysql,而MySQL安装向导将 MySQL 安装到 C:\Program Files\MySQL。如果不将 MySQL 安装到 C:\mysql下,你必须在启动或者在选择文件中具体指出安装路径。

4 选用压缩工具将安装压缩软件解压缩至选择安装的位置上。有些压缩工具有可能将其解压到你的被选择的安 装位置的子目录中。如果是这种情况,你可以将该子目录的内容从子目录移至安装路径下。

生成选择文件

如果你需要在运行服务器时,具体化启动选项,你可以在命令行标志出他们或者在一个选择文件中设置他们。 对于每次服务器启动时所使用的服务,你将会发现使用选择文件来具体化你的MySQL配置是非常便利的。尤其是 在以下情况中:当MySQL服务在Windows上启动时,其在两个文件中寻找选项:在Windows目录下的 my.ini 文件以及C:\my.cnf 文件。Windows目录典型的命名如下:C:\WINDOWS or C:\WINNT。你可以通过下面的命令来决定WINDIR环境变量 的值: C:\> echo %WINDIR% MySQL首先在my.ini 文件中寻找选项,然后是在my.cnf 文件中。然而,为了避免混淆,最好是只用一个文件。 如果你的PC使用加载的启动装备同时C:不是启动区,那你只能通过my.ini文件来进配置。不管你使用哪种选择 文件,该文件必须是文本格式。你同时也可以充分利用包含在你的MySQL发布版的样本文件。在你的安装目录下 寻找诸如 my-small.cnf, my-medium.cnf, my-large.cnf和my-huge.cnf的文件,这些文件可以被重新命名同时 拷贝到合适的位置作为一个基本的配置文件来使用。一个选择文件可以被任何文本编辑器生成和修改,诸如 Notepad等。例如,如果MySQL被安装在E:\mysql 目录下,而数据目录是在E:\mydata\data下,你可以生成一个 包含 [mysqld] 部分的选择文件来具体化基本目录和数据目录的参数值:
[mysqld]
# set basedir to your installation path
basedir=E:/mysql
# set datadir to the location of your data directory
datadir=E:/mydata/data
在这里需要注意Windows路径名在事先使用的斜线而不是反斜线选择文件中被具体化。因此当你使用反斜线时, 你必须使用双斜线。
[mysqld]
# set basedir to your installation path
basedir=E:\\mysql
# set datadir to the location of your data directory
datadir=E:\\mydata\\data
在Windows中,MySQL安装程序直接将数据目录安装在你安装MySQL的目录下。如果你需要在另外不同的位置使用 数据目录,你需要将整个数据目录的内容拷贝至新的位置。例如,如果MySQL安装在C:\Program Files\MySQL\MySQL Server 5.0 目录下,则数据目录的位置默认是在 C:\Program Files\MySQL\MySQL Server 5.0\data下。如果你需要将E:\mydata 作为你的数据目录,你需要做以下两件事情:

1 将整个数据目录和它的所有内容从C:\Program Files\MySQL\MySQL Server 5.0\data 移至E:\mydata.。

2 每次启动服务时,使用a--datadir选项来确认新的数据目录位置。

选择MySQL服务类型

以下显示了MySQL5.0Windows版本提供的服务类型:
mysqld-debug带有完全调试和自动内存分配检查的编译,该编译对象也包括 InnoDB和BDB数据表。
mysqld  优化InnoDB支持的二进制数据。
mysqld-nt优化命名管道支持的二进制数据。
mysqld-max优化InnoDB 和 BDB数据表所支持的二进制数据
mysqld-max-nt同mysqld-max功能一样,但是编译时支持命名管道
上述优化选项都是针对Intel 处理器的,但是应该可以工作在任何Intel i386-class 或者更高的处理器。在MySQL 5.0中,所有的Windows版本服务器都提供了对数据库目录的符号链接。 MySQL提供了对Windows平台上的TCP/IP 的支持。mysqld-nt和 mysql-max-nt 服务器则提供了对Windows NT,2000,XP和2003下的命名管道的支持。然而,不管在何种平台下,默认使用的都是TCP/IP。(在很多Windows 配置下,命名管道要比TCP/IP服务要慢)

命名管道的使用受以下条件的制约:

 命名管道只有当你启动服务时选择 --enable-named-pipe才会被激活。非常有必要的显式使用该选项 ,因为有些用户在命名管道正在使用时关掉MySQL服务器遇到过故障问题。  命名管道只有在mysqld-nt 或mysqld-max-nt 服务器下并且仅当该服务器运行在支持命名管道的 Windows版本的平台下才能使用。 在Windows 98 or Me系统下,只有当其安装了TCP/IP后,这些服务才能够运行。命名管道的连接不能 使用。 上述服务在Windows 95下不能够运行。注意:在参考手册中的大部分例子都使用mysqld作为服务名。如果你使用另外一个服务器,例如mysqld-nt,则 需对上述例子作合理的替代。

首次开启服务

这部分的信息主要应用在使用Noinstall版本安装MySQL时,或者希望手动而不是使用GUI工具配置和检测MySQL 的情况下。在Windows 95, 98, or Me下,MySQL客户端经常和使用TCP/IP的服务器相连接。(这允许在你网络上的任意机器 可以和MySQL服务器连接)。基于这一点,你必须保证在启动MySQL前,TCP/IP 支持安装在你的机器上。你可以 到在你Windows CD-ROM中找到TCP/IP服务。 在这里需要注意的是如果你正在使用老的Windows 95发布版本(例如OSR2),那很有可能你在使用一个旧的 Winsock软件包;MySQL需要的是Winsock 2。你可以从http://www.microsoft.com/.下载最新的Winsock软件包 。Windows 98具有新的Winsock 2库,所以无需更新库。在基于NT的系统例如 Windows NT, 2000, XP, or 2003上,客户可以有两个选择。他们可以使用TCP/IP或者当 服务器支持命名管道的连接时使用命名管道。为了得到在TCP/IP下工作的Mysql版本,你必须安装service pack 3(或者更新的版本) 如果在启动时,选择 --shared-memory, Windows版本的MySQL 5.0同样也支持共享内存的连接。客户端可以选 择 --protocol=memory 选项来进行共享内存的连接。

以上对启动MySQL服务进行了总体概述,下面的内容提供了从命令行或者作为Windwos服务来启动MySQL服务器更 加具体的信息:

假设MySQL安装在默认位置C:\Program Files\MySQL\MySQL Server 5.0下。如果你把MySQL安装在不同的位置上 ,则需调整相应的路径名。测试工作可以从控制台窗体(或者通过“DOS window”)通过一个即时命令来完成。 这样你就可以会在窗体中比较容易的看到服务器状态信息。如果你的配置有误时,这些信息将有助于你识别和 修复任何故障。为了开启服务,输入以下命令:
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld --console
对于InnoDB支持的服务器,在服务启动时你可以看到下列信息:
InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist:
InnoDB: a new database to be created!
InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280
InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280
InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile2 size to 31457280
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: creating foreign key constraint system tables
InnoDB: foreign key constraint system tables created
011024 10:58:25  InnoDB: Started
当服务器完成启动序列后,你可以看到如下信息,这些信息表明服务器已经开始服务客户端连接:
mysqld: ready for connections
Version: '5.0.13-rc'  socket: ''  port: 3306
服务器将会继续将其所产成的判断信息输入到控制台上。而你则可以打开一个新的控制台来运行客户端程序。如果你省略了 --console 选项,服务器将会把诊断信息输出到 数据目录下的错误日志中(默认是C:\Program Files\MySQL\MySQL Server 5.0\data )。错误日志以.err为扩展名。注意:在MySQL授权数据表的帐号初始化是没有密码的。

在Windows命令行下开启MySQL服务

MySQL服务器可以手动从命令行启动。该项操作可以在Windows的任何版本下完成。为了从命令行启动mysqld服 务,你应该启动一个控制台窗体(或者"DOS 窗体")同时输入以下命令:

C:\> C:\Program Files\MySQL\MySQL Server 4.1\bin\mysqld

在上述例子中使用的路径可以根据你的系统安装MySQL的路径不同而改变。在非NT版本的Windows版本上, mysqld是在后台启动的。这也就意味着在服务启动之后,你查看另外的即时命令。基于这一点,你应该在服务 运行时打开另外一个控制窗体来运行客户端程序。

你可以通过执行以下命令停止MySQL服务:

C:\> C:\Program Files\MySQL\MySQL Server 4.1\bin\mysqladmin -u root shutdown

该命令激活MySQL管理程序和服务器连接同时告诉他关闭服务。该名令是作为MySQL根用户连接的,在Mysql权限 系统中,根用户默认是管理员帐户。注意在MySQL授权系统中的用户和任意在Windows下登陆的用户是完全独立 的。如果mysqld没有启动,检查错误日志文件查看是否服务器向其中写入了信息,该信息说明问题产生的原因。错 误日志位于C:\Program Files\MySQL\MySQL Server 5.0\data 目录下。该日志是以扩展名为.err的文件。你也 可以试着重新开启mysqld 控制台服务,这样你就有可能获取一些有助于解决问题的信息。最后一个选项是开启mysqld时选择--standalone --debug。在这种情况下,mysqld 将会写一个 C:\mysqld.trace的日志文件,该日志文件将会包含mysqld为何没有启动的原因。

使用mysqld --verbose --help 可以看到mysqld所提供的所有选项的帮助信息。

作为一项Windows服务开启MySQL

在NT系列的Windows版本(Windows NT, 2000, XP, 2003)中,推荐运行MySQL服务的方法是将其作为Windows服务 进行安装,在这种情况下MySQL随着Windows开始和结束自动开始和结束。一个作为服务被安装的MySQL服务器能 够被从命令行上使用NET命令或者使用图形界面服务程序所控制。服务程序(Windows 服务控制管理器)可以被在 Windows控制面板中找到(在Windows 2000, XP, and Server 2003的管理工具下)。建议在执行服务器安装程序 时或者在命令行中执行删除操作时关闭服务应用程序。这将会防止很多错误。在将MySQL作为Windows服务安装之前,如果当前服务器正在运行,应该首先使用下述命令停止其的运行:

C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin -u root shutdown

注意:如果MySQL根用户有密码,那么你需要这样激活命令:

C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin -u root -p shutdown ,同时必须根据提示输入 用户密码。

这调用了MySQL的管理功能mysqladmin,mysqladmin可以连接到服务器,让服务器关闭。这个命令是作为MySQL 的 root用户而和服务器建立连接的,MySQL的 root用户在MySQL授权系统中是默认管理帐户。需要注意的是在 MySQL授权系统中的用户是完全独立于Windows上登录用户。

用下列命令可将服务器作用一项服务安装:

C:\> mysqld –install

如果你用server名字在将服务器安装成一项服务的过程中遇到问题, 那就试试用全称路径名。举例来说:

C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld --install

你也可以将到mysql bin目录的路径加入到Windows 系统PATH 环境变量:

 在Windows桌面上,右击“我的电脑”,选择“属性”  出现系统属性菜单,选择“高级”,然后单击“环境变量”按钮。 在“系统变量”列表中选择“路径”,然后单击“编辑”按钮。这时会出现编辑系统变量对话框。  将光标放在“变量值”对应的文字的末尾(请使用 End key,以确保光标在最后的位置) 。然后输入 MySQL bin 目录的全称路径, (举个例子, C:\Program Files\MySQL\MySQL Server 5.0\bin), 注意应该用分 号将这个路径与其它值分开。 点击“确定”逐个关闭所有打开的对话框。现在你就可以在DOS系统下从系统的 任意目录中,通过输入任意可执行的 MySQL 程序的名字而找到该程序,不必再输入路径。这包括服务器、 mysql 客户和所有 MySQL 命令行比如 mysqladmin 和 mysqldump。  注意如果你在同一台机器上运行多个MySQL 服务器的话,就不要将MySQL bin 目录加入到 Windows 路 径中。

警告: 在手工编辑系统路径的时候一定要特别小心,如果不小心删除或改变了系统路径中的任何部分都将导致 误操作甚至导致系统不稳定。服务安装命令并不启动服务器,关于这点后面将详细介绍。

MySQL 5.0 在安装服务的过程中对附加参数提供的支持有限: 你可以在安装选项之后立即为服务命名,否则默认的服务名字是 MySQL。

 如果设置了一个服务名字,就可以用使用单一选项。通常按照约定,这应当是--defaults- file=file_name 来设置选项文件的名字,服务器在启动时会从选项文件中读取选项。可以使用单一选项而不用--defaults-file,但不推荐这样做。因为,--defaults-file 更加灵活,你可以 通过将多个选项放到指定的选项文件中而为服务器设置多个启动选项。同样,在MySQL 5.0中我们也不支持使用 不同于--defaults-file的选项,但5.0.3版本就可以这样做了。

 对于MySQL 5.0.1,你也可以在服务名字下设置一个 --local-service(本地服务)选项。这会使服务 器用LocalService Windows帐户运行。这种帐户只在Windows XP或更新的系统上才有。如果服务名字下既有-- defaults-file 也有 --local-service,那么它们之间不论次序。 对于安装成Windows服务的MySQL服务器来说,由下面的规则决定服务名字和服务器使用的选项文件:  如果服务安装命令没有指定服务名字,那么安装选项将默认服务名字为MySQL, 服务器将使用 MySQL服 务,并从标准选项文件中的 [mysqld]群中读取选择。  如果服务安装命令没有指定了一个服务名字,服务器将使用指定的服务名字并从从标准选项文件中与 服务名字相同的群中读取选项。 服务器也从标准文件选项文件中的[mysqld]群中读取选项。这保证可以从[mysqld]群中读取所有MySQL服务都 用的选项,而用指定服务名字按照的服务器使用和与指定服务名字相同的选项群。  如果安装命令在服务名字之后指定一个 --defaults-file 选项,那么服务器只从指定文件的 [mysqld] 群中读取选项而忽略标准选项文件。

下面的命令是一个复杂的例子:

C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld --install MySQL --defaults-file=C:\my- opts.cnf

在这里,由安装选项给出了默认服务名字MySQL。如果没有给出--defaults-file选项,那么这个命令将使服务 器从标准选项文件中的[mysqld]群中读取。然而在这里给出了--defaults-file选项,所以服务器只从指定文件 的[mysqld] 选项群读取。

你也可以在启动MySQL服务之前,在Windows Services 工具栏中将选项定义为启动参数。一旦MySQL服务器被安装成一项服务,Windows就会在启动时自动启动该服务。也可以在Services 工具栏中直接 启动MySQL服务器,或使用NET START MySQL命令也可。NET 命令不区分大小写。

作为服务运行时,mysqld无权使用控制窗口,因此在这里看不到消息。如果mysqld不能启动,就查错误记录看 看服务器是不是写下了什么说明问题原因的消息。错误记录在MySQL数据目录下(比如: C:\Program Files\MySQL\MySQL Server 5.0\data)。错误记录的后缀名是 .err。

MySQL作为服务安装的情况下,如果服务正在运行,Windows关闭的时候会自动停止服务。 如果你不想在boot 进程中自动启动服务,你可以将服务器作为手动服务安装。手动服务的安装需要选择“手动 安装” 选项而不是 “安装”选项:

C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld --install-manual

要删除作为服务安装的服务器时,首先要通过NET STOP MYSQL关闭正在运行的MYSQL,然后用“删除”选项删除 它:

C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld --remove 如果mysqld不是作为服务运行,可以用命令行启动它。

五、测试 MySQL安装

你可以通过执行下列任何一个命令来测试MySQL 服务器是否安装:

C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqlshow
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqlshow -u root mysql
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin version status proc
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql test
如果mysqld对来自客户程序的TCP/IP 连接反应很慢,那么说明你的DNS可能有问题。在这种情况下,用--skip -name-resolve选项启动mysqld,而且在MySQL 授权列表的Host栏中只使用本地Host和IP。 你可以强迫 MySQL客户运用管理连接,而不用TCP/IP。方法是选定--pipe 或--protocol=PIPE 按钮,或指定 . (period)作为主机名。运行--socket 选项来规定管道名。

九、排除在Windows下安装MySQL的故障

如果是初次安装MySQL,你可能会遇到一些阻止MySQL启动的错误,这一部分的目的就是帮助你诊断和排除某些 故障。 在排查故障时,可用的第一项资源就是错误记录。MySQL 服务器的错误记录会记下阻止服务器启动的相关错误 。错误记录在数据目录下,my.ini文件中记载了数据目录的地址。默认的文件目录位置是C:\Program Files\MySQL\MySQL Server 5.0\data。 另外在MySQL服务运行过程中的控制信息也可能会记载一些相关的错误。在mysqld作为服务安装之后,从命令行 中执行NET START mysql命令查看是否有关于作为服务启动MySQL服务器的错误信息。

下面的例子是一些首次安装MySQL和启动服务器的过程中,可能遇到的常见错误信息:
System error 1067 has occurred.
Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist
 当 MySQL 服务器找不到 mysql privileges database 或其它关键文件时,就会产生这样的信息。当 MySQL的原始数据或数据目录安装在不同于默认位置(分别是C:\mysql 和 C:\Program Files\MySQL\MySQL Server 5.0\data )时,常常遇到这个问题。 一种情况是MySQL已升级并安装到新的位置,但配置文件并没有反映新的安装位置。另外 ,可能会产生相互冲 突的新、旧配置文件。因此,在升级MySQL时,应确保删除旧的配置文件或重命名。 如果你将MySQL安装到了C:\Program Files\MySQL\MySQL Server 5.0以外的其它位置,你必须确保MySQL服务器 通过一个配置文件(my.ini) 知道安装的位置。my.ini文件必须在Windows目录下,通常是C:\WINNT 或 C:\WINDOWS。你可以从WINDIR环境变量的值来确定其具体位置,需要从命令提示符发出下列命令:

C:\> echo %WINDIR%

生成一个选项文件,并且可以用任何文本编辑程序修改,比如Notepad。举例来说,如果MySQL安装在E:\mysql 、数据目录是D:\MySQLdata,你可以创建一个选项文件,在其中创建一个[mysqld]部分来定义basedir 和 datadir参数:
[mysqld]
# set basedir to your installation path
basedir=E:/mysql
# set datadir to the location of your data directory
datadir=D:/MySQLdata
注意在选项文件中,Windows 路径名是用(forward) slashes 定义的,而不是用 backslashes。如果你使用的 是 backslashes,你就需要将它们加倍:
[mysqld]
# set basedir to your installation path
basedir=C:\\Program Files\\MySQL\\MySQL Server 5.0
# set datadir to the location of your data directory
datadir=D:\\MySQLdata
如果你在MySQL配置文件改变了datadir值,那么你在重新启动MySQL服务器之前就必须将已有的MySQL数据目录 转移到相应的位置。

 Error: Cannot create Windows service for MySql. Error: 0

 如果你不先停止并删除现有的MySQL而重新安装或升级时,或用MySQL Configuration Wizard安装 MySQL时,就会产生这样的错误。因为当Configuration Wizard试图安装服务时,就会发现已经有一个同名的服 务。 对这个问题的一个解决方法是,在使用configuration wizard时选择一个服务名称,而不用默认的mysql 。这 可以使新的服务正确地安装,但旧的还放在那里。建议最好还是把不用的删掉。
要永久删除旧的mysql服务,需要用户以管理权限在命令行上执行下列命令:
C:\>sc delete mysql
[SC] DeleteService SUCCESS
如果你的Windows版本上没有sc工具栏,就从下面的网址上下载delsrv工具栏: http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/delsrv-o.asp 然后运用delsrv mysql syntax。

六、在Windows上升级MySQL

这部分介绍一些在Windows上升级MySQL的必需步骤。
1. 在升级之前,你应当一直支持目前的MySQL安装。 “Database Backups”
2. 在http://dev.mysql.com/downloads可以下载在Windows上安装MySQL 的最新内容。
3. 在升级MySQL之前,必须停止服务器。
如果服务器是作为服务安装的,要从命令提示符通过下列命令停止服务:

C:\> NET STOP MYSQL

如果不是作为服务安装的,就用下列命令停止MySQL服务器:

C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin -u root shutdown

当将4.1.5以前的版本升级到 MySQL5.0时,或将用Zip压缩文件安装的MySQL升级到用MySQL Installation Wizard安装的MySQL版本时,必须手动删除以前的安装和MySQL服务(如果服务器有作为服务安装的话). 用下列命令删除原来的MySQL服务:

C:\> C:\mysql\bin\mysqld --remove

如果不删除原有服务,MySQL Installation Wizard可能无法安装新的MySQL服务。

如果你从Zip 压缩文档安装MySQL,要么覆盖原有的MySQL安装(通常在C:\mysql),要么在不同的目录下安装 ,比如C:\mysql4。建议覆盖原有安装。

重启服务器。如果MySQL是作为服务运行的话,用NET START MySQL,或者直接调用mysqld。

Windows 和 Unix两种系统下的MySQL比较

MySQL在Windows上已经相当稳定。Windows版本的MySQL和相应的Unix版本的MySQL具有相同的特性,但存在以下 几点不同:

• Windows 95和线程

Windows 95分出约200字节的主内存给每一个线程。MySQL的每个连接创建一个新的线程,所以如果服务器处理 多个连接时,不应该在Windows 95下运行 mysqld。其他版本的Windows不存在这个bug。

• 限制端口数量

Windows系统下大概有4,000个可用端口,当一个端口的连接关闭时,需要2-4分钟才能重新启用该端口。当处 于代理连接和断开连接的高峰期时,可能使所有的端口在重新启用之前都处于关闭状态。如果发生这种情况, MySQL服务器将停止相应,尽管它还处于运行状态下。需要注意的是,机器上运行的其它应用程序也可能使用端 口,这也会使可用端口的数量下降。更多的信息请参看下面链接: http://support.microsoft.com/default.aspx?scid=kb;en-us;196271.

• 同时读取

MySQL依赖于调用pread()和pwrite()系统来使INSERT和SELECT可用。目前,我们使用mutexes来代替pread()和 pwrite()。我们打算用虚拟的界面来替代文件水平界面,这样我们就可以在NT,2000和XP系统上使用readfile ()/writefile()界面并获得较高的速度。目前MySQL 5.0只能执行2,048个文件,这就意味着不能在Windows NT ,2000,XP和2003以及Unix下运行多个同时运行的线程。

• 封闭读取

MySQL对每一个连接使用封闭读取,如果指定的通道连接可用,这就意味着以下几点:
o一个连接不会在8小时后自动断开,这发生于Unix版本的MySQL。
o如果连接悬挂,只有关闭MySQL才能断开该连接。
omysqladmin kill 对睡眠状态的连接无效。
o只要存在睡眠连接,mysqladmin shutdown不会异常终止。
• ALTER TABLE

当你正在执行一个ALTER TABLE语句时,在被其他线程使用前表格将被锁定。在Windows系统下可发生该情况, 你不能删除被另外一个线程使用的文件。将来我们可能找到解决该问题的方法。

• DROP TABLE

因为MERGE 处理器处理隐藏于MySQL上一层的表格,这可使Windows下的被MERGE表格使用的DROP TABLE不工作。 因为Windows不允许dropping文件开启,你就必须转储清除所有的MERGE表格(使用FLUSH TABLES)或者在 dropping文件前先撤销MERGE表格。

• 数据目录和索引目录

Windows系统忽略了CREATE TABLE的数据目录和索引目录选项,这是由于Windows不支持符号连接造成的。在拥 有无功能realpath()调用的系统上也会忽略这些选项。

• 撤销数据库

你不能够撤销正在被某个线程使用的数据库。

• 从任务管理器内关闭MySQL

你不能够在任务管理器内关闭MySQL,也不能依靠Windows 95的关机操作关闭MySQL。你必须使用mysqladmin shutdown来关闭MySQL。

• 名称的大小写

在Windows下的文件名不区分大小写,所以Windows同样不区分MySQL数据库和表格的名称的大小写。唯一的限制 就是数据库和表格名称必须在给定的语句内全部使用相同的case来指定。

• ‘\’路径名分离字符

在Windows下使用‘\’来分离路径名,‘\’同样是MySQL里的换码符。如果你使用LOAD DATA INFILE 或者 SELECT ... INTO OUTFILE,使用Unix格式的文件名内出现‘/’字符:
mysql> LOAD DATA INFILE 'C:/tmp/skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
换句话说, 你必须使用两个‘\’字符。
mysql> LOAD DATA INFILE 'C:\\tmp\\skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
• 进程管道的问题

进程管道不会按照Windows命令行的提示可靠的工作。如果进程管道包含有字符^Z / CHAR(24),Windows便为认 为达到文件尾并终止程序。当你应用下面的一个二进制日志时便会出现问题:

C:\> mysqlbinlog binary-log-name | mysql --user=root 如果你需要应用该日志并遇到问题,你可以怀疑这是由于^Z / CHAR(24)字符导致的,可使用下面的工作区来解 决: C:\> mysqlbinlog binary-log-file --result-file=/tmp/bin.sql C:\> mysql --user=root --execute "source /tmp/bin.sql" 这样,后面的命令也可以可靠的读取含有二进制数据的SQL文件。

• 用户错误所导致的拒绝访问

如果你尝试运行MySQL代理程序来连接服务器,同时该服务器又在同一台机子上运行着,你就被当作'some- user'@'unknown'用户而被拒绝访问'mysql'数据库,这表明MySQL不能够恰当的解析主机名。要解决该问题,你必须创建一个名为\windows\hosts的文件,并包含下面的信息:
127.0.0.1       localhost

posted @ 2006-08-22 00:55 江天部落格 阅读(988) | 评论 (0)编辑 收藏

到底是应该根据市场需求找产品还是有了产品再根据市场需求找目标客户

这个问题最近很热,之前我们都是先开发了产品然后在营销时分析市场,细分客户,找到这类产品的用户对其进行重点营销。但最近有一个新的提法,即在开发产品前就应该对市场进行调研,然后根据市场需求再开发产品。

理论上讲,后一种方法是好的,确实应该这么做,因为如果按照前者来做,则开发产品的时候不能对市场反应和收益做出准确的预估。但是不可否认,我们之前确实是按照前一种方法做了很久。

那么问题来了,到底是应该用哪种方法呢?有人会毫不犹豫的说当然用后者。不错我也同意,是“应该”用后者。其实我想之前也肯定有很多人同意用后者,或者想计划着用后者。那么问题又来了,既然大家都说后者好,那为什么还一直用前者呢?

给出答案前,我们先看看计算机通信中的两种技术:Ethernet和ATM。
学过通信的都知道:ATM的标准无论在QOS、安全、控制、计费方面都比Ethernet标准更好,那么现在电信运营商用的主流标准是什么?答案是Ethernet。

其实,我们在定选用哪个标准或方法时,不应该只看标准或方法本身是否优秀和完善,还应该看哪个标准更易实施和执行,哪个标准或方法有更简单更实用更低成本的技术去支撑。ATM标准很完善,但因为其太复杂,执行投入成本过高而最终输给了Ethernet。

那么回到一开始提出的问题,回顾我们现在所有的一些调研方法,其在调研开始时始终都是有一个具体的目的的而且调研时均是选取一定特定用户群的,即调研某产品市场反应如何,调研某产品收益如何,调研某产品或某服务用户满意度如何。因为这样做很容易对调研结果进行评估、有目的性、简单易行、节约成本。从方法论的角度来看,如果没有调研的目标群体、调研的针对产品、调研的期望,调研如何进行?没有期望,怎么可能知道是否完成了期望。也许使用后者,期望就是从未知的未知中发现新的产品需求,难道要对所有的目标群体(全中国的人)进行可能是长大几十页的问卷调查?(想想在没有具体目标产品的前提下,这些问题会是什么?家里有几个孩子?男的女的?结婚没?结婚了生子没?生的男的女的?在哪上学?学什么的?。。。。会不会嫌烦呢?会不会告诉你呢?))。

结论是:想用后者,却使用了这么长时间的前者,不是偶然的,不能一味的强调要用后者。
当然,我也不是说根据用户需求找产品一定不可行,在强势要求使用时,应先从有无具体可行的执行方法上考虑。

posted @ 2006-08-20 18:45 江天部落格 阅读(492) | 评论 (0)编辑 收藏

魔兽争霸-冰封王座

开始Blog的第一天记录一下最近开始玩魔兽争霸-冰封王座。个人比较钟爱即时战略游戏,从大学开始玩的红警,到研究生玩的星级争霸,再到前段时间玩的命令与征服-将军。都还玩的可以,现在开始玩魔兽了,发现魔兽与一般的即时战略不一样,还是比较难玩,主要是各种魔法的应用增加了游戏的难度。专家建议新手开始玩精灵族,但是我还是从人族开始玩,感觉比较像人,农民、武士的面孔分的比较清楚。

posted @ 2006-08-16 21:51 江天部落格 阅读(271) | 评论 (0)编辑 收藏

仅列出标题
共7页: 上一页 1 2 3 4 5 6 7