自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 haskell学习心得

最近学了一点haskell,觉得这是一个很有趣的语言,决定继续学下去,并把它作为第三中语言,排在java和c++之后。当然我学他也就几天而已,理解的可能不对,后续会进一步改善。haskell是一门函数式语言,调用的入口是main函数,例如:main=do putStr

2011-09-30 19:06:14 956

原创 一次神奇的SQL 错误调试经历

上周接到一个奇怪的bug,一个曾经运行得很好的存储过程突然产生了错误的结果。负责维护的兄弟们很负责任的对错误进行了跟踪,并把错误定位一个如下的语句: SELECT *into SomeTableFROM A join B on A.id=B.id         join C on A.id=C.id 他们发现从SomeTable做查询的时候,出来的结果比实际结果要

2010-05-11 18:49:00 538

原创 C++的sizeof 初探

sizeof 可以作用于一个类型或者一个变量上,返回这个类型的一个变量或者输入变量所占用的空间的字节数。 当sizeof作用于一个数组变量时,例如:sizeof(TCHAR[100]) = sizeof(TCHAR)*100 通常用 sizeof array/sizeof array[0] 来计算数组的长度。 当sizeof作用域class, struct, union

2009-11-18 19:15:00 382

原创 SQL使用--Shrink所有数据库的Log

数据处理是当前数据库常见的应用。一些数据库组成DATA mart从数据源里抽取关心的表进行聚合,将结果推送到算法中进行处理,从而高性能的回答用户的查询。 总所周知,Log文件是记录数据库操作的文件,对数据库的完整性,一致性有着重要的意义。作为数据处理的一个常见后果是Log文件的超级庞大。虽然将数据库的恢复模式设置成Simple可以提醒数据库尽量使用已有的Log空间,而不是申请新的,后者将会

2009-11-10 18:09:00 1090

原创 SQL 使用-Update table

对问题的理解是解决问题的前提,今天遇到一个项目中的问题让我深刻的体会到这一点。 两个表:T1Term Domain WithAncestorcar    x.com     ?bike  y.com     ?car    a.x.com  ? T2Parent    Domainx.com     a.x.com 求出T1中的WithAnces

2009-11-09 18:47:00 3819

原创 纪念我的表姐夫

<! /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-al

2009-11-07 01:57:00 769

原创 SQL Server-DMV 初探

进来不断的进行数据的清除和整理,结果一个过程花费了48个小时还没有结果。按照我们任务的规模,通常可以在几个小时内完成。考察了内存 CPU负载都不高。问题究竟在哪里呢?决定考察下动态管理视图,首先看了sys.dm_od_tasks。使用sessionid做过滤,看到了9个task,检查了下文档明白了,因为机器上有8个CPU,外加一个协调的task。在这个视图里,还看到所有的task都

2009-08-21 19:55:00 2656

原创 试着解决http://topic.csdn.net/u/20090610/20/92c3d2eb-4ee5-4df1-bc09-2fd32254fa06_3.html

CSDN网友发布了一个题目,如下连接所示:http://topic.csdn.net/u/20090610/20/92c3d2eb-4ee5-4df1-bc09-2fd32254fa06_3.html 个人比较感兴趣,于是试着给了如下答案: 首先创建表:CREATE TABLE [dbo].[ProductOrder]( [pno] [int] NULL, [pQty] [

2009-08-06 14:02:00 1928

原创 SQL研究-相似的数据类型

 数据类型在精度,范围上有较大的差别。选择合适的类型可以减少table和index的大小,进而减少IO的开销,提高效率。本文介绍基本的数值类型及其之间的细小差别。 最常用的数值类型是int,但是它未必是最佳选择。bigint,smallint,tinyint可以应用在特殊场合。他们的特性如下表所示:Data type Range Storage

2009-07-31 10:39:00 553

原创 如何写出优秀的子程序

正如人月神话说讲的那样,程序员的觉得很爽的事情之一就是看到自己写的程序被别人调用。当然,程序员觉得很爽的另一件事是,在难题面前,找到一段可以用来解决难题的代码。但是这件两全其美的事却会在程序发生改变时蒙上一层阴影。稍有不慎,别人对你感激就会编程怨恨,而你帮助就编程别人的负担。 所以当你要改动一个被别人调用的程序,请千万要小心。但是程序的改进又是不可避免的,他可能会有bug,可能

2009-07-22 21:08:00 549

原创 SQL Server通用的分区增加和删除的算法

本算法默认分去函数中已经包含了足够多的分区。不需要我们去动态的创建分区。 首先是将一个数据表加入到分区表的方法:[dbo].[SP_Helper_Partition_Add] @SrcTable nvarchar(256), 待加入的表 @DestTable nvarchar(256), 目标表 @idxOnDest nvarchar(1024), 目标表上的索引创建语句 @Parti

2009-07-21 18:49:00 509

原创 算法分析-顺序数选择

顺序数,order statics,直接翻译是顺序统计,个人觉得不能表达他的意思。实际上它指的是指定集合中的一个数字,这个数字在排序后的集合中占据第i个位置。显然这个数是和顺序相关的,而和统计的关系不大。特殊的顺序数有最大值,最小值,分别对应第n顺序数和第1顺序数。选择算法就是求解顺序数的算法:输入:一个包含n个不同数字的集合,以及一个整数 i 表示第几个顺序数;输

2009-07-19 12:58:00 767

原创 MS 多维数据库-基本架构

多维数据库是一个非常有趣的领域,在企业应用中得到越来越多的应用,其创造的价值恐怕已经接近于数据库了。当然在这个领域Oracle和IBM是当之无愧的老大,市场占有份额加起来超过了8层了吧。但是单纯从工具的易用性和方便性角度来讲,MS的AS工具无疑占据了领先地位。为什么没人买呢?引用一个做市场的哥们的话:因为这个世界太浮躁了,老板们不愿意去培训员工使用一套工具,它们只愿意花钱去买看得见的东西。

2009-07-15 20:23:00 1759 2

原创 算法-QuickSort及其复杂度分析

快排的算法有很多种变型,比较常见的一种如下:QucikSort( p,q)Begin  if( p>q) return  r = partition(p,q)  QuickSort(p,r-1)  QuickSort(r+1,q)End其中partition函数定义如下:Partition(p,q)begin  tmp=A[q];  i =

2009-07-11 23:29:00 4148

原创 培养正确的调试方法

作为一个代码民工,不管你用什么语言,调试总是不可避免的。有效的调试可以帮您提高代码的质量,缩短查找错误的时间,而且会减少引入错误的几率。从某种意义上说,调试的技巧甚至比算法的技巧还要宝贵,至少毫不逊色。毕竟,当今社会需要你去发现一个算法,哪怕是实现一个算法的机会并不多,大多数时候只需要遵守已有的步骤,一步一步的完成即可。但是企业在招聘的时候,往往折服于能在5分钟内写出一个算法的能力,而

2009-07-09 19:29:00 629

原创 SQL存储过程调试方法

在过去的一年时间里,很大一部分时间花在SQL编程上,刚开始是改别人的,后来越来越烦躁,就重写了很多的代码。当然重写的代码一方面是前面的代码比较换乱,不易阅读,另一方面是新增加的功能接连到来,仿佛往一个袋子里塞东西,慢慢的,就要把袋子塞暴了。重写代码避免了这些麻烦,可也引入的错误,几经反复,终于稳定下来。我也痛定思痛,把写sql的经验教训总结如下。 经验1,模块化。虽然SQL只是脚本

2009-07-08 21:19:00 1972

原创 在批处理文件中调用SQL

使用sqlcmd可以在批处理脚本中执行SQL。虽然这个命令的参数很多,但幸运的是,我们不需要全部理解,在这里简要介绍以下几个: { -U login_id [ -P password ] } | –E trusted connection }] 如果指定了-E就不需要指定用户名密码,当然指定了用户名密码就不用-E了;-S server_name [ / instance_name ] 数据

2009-07-07 19:32:00 1622

原创 递归算法的复杂度分析

 首先介绍3种表示复杂度的符号:Tight 上下界,f = tight(g)表示当输入大于某个整数时,存在常数c1和c2,使得 c1*g Lower 下界, f = Lower(g)表示当n足够大的时候,存在c,使得 fUpper上界, f = upper(g) 表示你足够大的时候,存在c使得 f> g * c;算法复杂度分析就是求g的过程。通常来讲,算法的上界复杂度才有意

2009-07-04 20:11:00 2863

原创 对分区表进行alter-switch时遇到的错误

将一个表的数据加入分区表中,可以通过如下步骤进行:创建一个和目标表一样定义的表;在表上加上constraint以确保表的数据在目标分区里;Alter table 源表 switch to 目标表 partition 分区号其中分区号可以通过$partition.partion_func( column value)获得这个过程比insert select要快很多,因为不

2009-07-03 09:22:00 1340 1

原创 SQL研究-非平衡树聚合

 今天,我重新检查了一个困扰已久的问题,在经过仔细的考虑,算是找到了一个比较合理的解决办法。 问题是这样的,表StoreProductSales记录一系列的商场以及它们每天的营业额。商场与商场之间有从属关系,记录在Store_WithAcestor表里。当用户查询某个商场的对某个产品的销售额时,除了返回自己的营业额,还需要包含所有子商场的营业额。 示例结构和数据如下:Sto

2009-07-01 18:29:00 871

原创 基于概率的算法分析摘要

基于概率的算法分析摘要有如下的算法:HireAssitant(){Best=0;For 1 to n{    Interview candidate I;    If( candidate I is better than best)    {        Best = I;        Hire I;}}}上述算法中,有两个地方

2009-06-28 16:53:00 1365

原创 数据库引擎-事务和并发

事务是一个很基本的概念,简单的说就是一个组操作一起做完。当两个事务并发执行时,可能会出现以下的现象:修改丢失:两个线程同时读出某行的值,修改完先后保存回去,先保存的值就丢失了。假设你和你老婆在两个ATM上同时对同一个账号存钱,开始时账户里 有10万,然后你存1万,你老婆存2千。你们家收入不少,不过在北京买房子还是不够的。题外话。如果出现了这里的错误,糟糕,你会发现存完了只有11万或

2009-06-26 18:42:00 533

转载 请慎重!人生几个致命的经典问答

问题一,    如果你家附近有一家餐厅,东西又贵又难吃,桌上还爬着蟑螂,你会因为它很近很方便,就一而再、再而三地光临吗?     回答:你一定会说,这是什么烂问题,谁那么笨,花钱买罪受?     可同样的情况换个场合,自己或许就做类似的蠢事。不少男女都曾经抱怨过他们的情人或配偶品性不端,三心二意,不负责任。明知在一起没什么好的结果,怨恨已经比爱还多,但却“不知道为什么”还是要和他搅和下去,

2009-06-25 16:18:00 349

原创 数据库引擎-线程和任务

每个数据库实例都是一个独立的操作系统进程。每个进程可能同时服务于上千个连接,每个连接都需要一个或多个线程来接受请求,处理并返回结果。此外,数据库进程还需要线程维护网络通讯的线程,各个服务之间进行通讯的线程。 数据库是如何调度这些线程呢?数据库实例有自己的调度机制,这样当需要线程调用时,它就不需要访问系统内核。它通常维护一个线程缓冲区,因此它不需要进行太多的创建或销毁的操作。可以通过ma

2009-06-24 20:02:00 475

原创 SQL研究-分区表

所谓分区表就是当表太大的时候,比如1百万行,按照某个特殊的列分成10份,每份10万行左右,要求这一列中的值是有限的,并且每个值对应的行数基本相等。使用分区表可以方便的进行整个分区的增减,只涉及元数据而不涉及具体的数据写入操作。 创建一个分区表需要经过以下几个步骤:1. 创建分区函数,它附则将插入的数据放到相应的分区里面去; 2. 创建分区方案,它附则确定每个分区的数据存放在什么地方

2009-06-23 21:09:00 364

原创 一个脚本的诞生

 手上一个有一个让人很郁闷的工作,那就是维护项目组给客户的示例。这个示例包含4个project,各有20多个文件,每次修改的时候就会有示例需要修改,修改后的文件必须按照project为单位打成zip包,copy到指定的地方去。包里不能包含编译产生的文件,还必须包含所引用的DLL。所以每次我要对每个project做以下操作:1. 删除bin目录;2. 看引用了那些dll,从一个地方考过来覆盖

2009-06-23 20:46:00 439

原创 数据库引擎-内存管理

数据库能够高效的读写硬盘上的内容,很大程度是因为它使用了普通应用程序所没有的内存管理机制。为了保证性能,数据库引擎需要将很多信息保存在内存中,典型的例子有:数据文件的位索引表;一个大表的索引页;一个需要经常修改的表;以及数据库本身的一些内部对象,如锁,连接等。本文以SQL Server为例讲述数据库的内存管理。数据库的内存管理是一个自动的过程,它通常尽可能多的获取内存,直到操作系统出现内存短缺的时

2009-06-21 14:08:00 569

原创 数据库引擎-分区表上的查询和维护

分区表是将一个很大的表按照某列的值分成若干个部分进行存储。举例来说,证券交易所需要保存每天的交易记录,估计每天交易量需要1G的存储量,而数据库只保存最近90天的数据,其余数据保存在磁带上。这样我们就可以将目标表按照数据日期分成90个分区。当第91的数据到来时,将第一天的数据切除。正如我们在之前的文章中所描述的那样,每个分区对应于一个分配单元。而对整个存储单元的添加或删除操作

2009-06-20 11:48:00 1263

原创 SQL研究 - Apply

 Apply是SQL Server 2005引入的一个新操作符,具有如下的基本语法: select *from tableA apply table_func(...) Apply左边表的每一行输入右边的函数,该函数根据输入返回一个表,最后输入表的每一行与表结合起来,形成了结果集。 有必要解释下表值函数,它是返回值为一个表的函数,请参考MSDN的相关文档。 现在

2009-06-17 20:00:00 736

原创 数据库引擎-存储管理2

上一篇文章描述了数据库是如何快速而精确的将数据保存到文件中的,同时也提到了分配单元和分配单元索引表。现在,我们来看看数据库对象是如何将它们的内容写在这些页面上的。并非所有的数据库对象都需要写入数据文件,像存储过程,函数,视图,表的结构等数据实际上保存在Master数据库中,实际保存在数据文件中的是表,索引或者索引试图。  有必要解释下索引视图,它就是通常所说的物化视图。普通视图实际只是

2009-06-16 13:09:00 492

原创 数据库引擎-存储管理 1

今日和一个朋友聊起数据库,伊很愤愤的说,数据库不就是一堆文件读取写入吗,我找几个人干一年也差不过弄个能用的出来,干吗那么贵。实话说,此话有他的道理,虽然各大数据库厂商不遗余力的在自己的产品上叠加无穷无尽的概念,增加无数的噱头,归根到底,它所做的就是读写文件这么简单。但是从另一个方面来讲,数据库的价值在于能够永远正确的读写文件,不管是在多用户并发的时候,在出现系统崩溃的时候在,在数据容量超乎想象的巨

2009-06-12 14:17:00 691

原创 数据库引擎研究 - Log

正如大家所知道的那样,数据库里不仅有数据,还有日志,便是Log。我们知道,数据库的数据终究是依赖于系统的IO写入到文件里去并从文件读取的。数据库不能保证系统能成功的执行它的每一个写出的请求,大家知道,系统也不容易,天知道什么时候就断电了,UPS也不是常常工作的,硬盘可能停止工作了,主板可能烧掉,内存甚至会爆掉。于是呢,数据库说,求人不如求己,我自己保证我的数据永远都是对的。 于是它用了LO

2009-06-11 19:21:00 487

原创 SQL研究 - 查询语句被处理的过程

我们向数据库提交了一个查询,假如我们的语句是正确的,我们理所当然的期望的到一个正确的结果。 如果要牛角尖一下,怎样才是一个正确的查询呢?显然首先你查询的对象是存在的,不管是表还是视图,函数或者存储过程。你指定的条件是合法,不管是Jion的条件,Where中的条件,还是Having中的条件。你希望展现的列是存在的,如果一个表里存放的机器的话,你不大可能从里面选出一个性别的字段。那么我

2009-06-11 09:35:00 471

原创 SQL研究 - CTE深入

本文深入研究如何使用CTE完成图的深度遍历,并查找最短路径。本文假设你在为一家航空公司做一个导游的软件,其中的一个基本需求是查询从一个城市到另一个城市的飞行路线。并假设除了软件所已知的航班之外,并不存在其他的直达航班。首先你让用户看到这样的图片: 在后台你需要创建的表结构可以简化如下:CREATE TABLE dbo.Flights(  city1       NVARCHAR(2

2009-06-11 09:28:00 2018

原创 SQL 研究- Common Table Expression

Common Table Expression,简称 CTE,是SQL Server中的三种保存临时结果的方法之一。另外两种是临时表和View,当然你也可以说View并不保存数据,从这一点上来将, CTE更像View一些。当你的查询需要从一个源表中统计出结果,基于这个结果再做进一步的统计,如此3次以上的话,你必然会用到View或者临时表,现在你也可以考虑用CTE了。 CTE的语法相当的

2009-06-10 14:43:00 923 2

原创 SQL 研究 - Cube 和 RollUp

使用Pivot,你终于满足了老板的要求,生成了各个投资人在Asia和Europe的投资统计表。在赞许的同时,他又提出新的需求:需要统计每个投资方在各个地区的投资总和,各个投资方的所有投资,以及各个地区所吸引的所有投资。 又一次,你跑到数据库里,看到如下的表:CREATE TABLE [dbo].[Investment]( [Investor] [nvarchar](256) NUL

2009-06-09 08:59:00 499

原创 SQL研究 - Pivot

在一个风和日丽的早上,老板从邮箱里发给你一个任务,希望你根据一个投资记录表做出一个统计。你匆匆跑到指定的数据库,发现结构如下的一张表:CREATE TABLE [dbo].[Investment]( [Investor] [nvarchar](256) NULL, [Capital] [float] NULL, [District] [nvarchar](256) NULL)你按照惯例

2009-06-09 08:56:00 661

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除