Lae's Blog

CODE LIFE --像蚂蚁一样工作,像蝴蝶一样生活

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  22 随笔 :: 0 文章 :: 16 评论 :: 1 引用

2010年12月4日 #

这个云计算热炒的时代,如果你没有处理过海量数据的话,你将不再是个合格的Coder。现在赶紧补补吧~

  前一阵子分析了一个将近1TB的数据群(gz文件,压缩10%)。因为第一次分析如此巨大的数据,没有经验,所以浪费了许多时间。下面是我整理的一些经验,方便后者。

  下载数据

  Q:怎么自动下载多个文件?

  这是我遇到的第一个问题。当数据量很大时,一般都会分成很多个文件存放。这时下载文件比较麻烦。

  A:用Wget命令。Windows下花费一点时间去下载安装。但之于手动下载,能省不少时间。

  我提供两种方式方式下载文件,

  a)用Wget的递归下载选项 “-r”。一般命令如下

  wget –r http://<下载数据的根目录>/ -o <下载记录文件名> -np

  因为递归下载没法控制进度,所以建议不一要次递归下载太多的文件

  b)用Bat+Wget,多次执行Wget。一般命令如下

  wget –r http://<下载数据的根目录分支1>/ -o <下载记录文件名> -np

  wget –r http://<下载数据的根目录分支2>/ -o <下载记录文件名> -np

  wget –r http://<下载数据的根目录分支3>/ -o <下载记录文件名> -np

  …… ……

  wget –r http://<下载数据的根目录分支N>/ -o <下载记录文件名> -np

  用Bat可以降低出错带来的影响。

  另外,Wget可以通过 –A 选项来指定希望下载的文件的后辍,通过 –P 选项来指定下载文件存放路径。更多命令,参见wget -h

  Q:这速度。。。什么时候才能下完?

  网速永远是个瓶颈

  A:如果下载服务很远的话,你应该考虑代理。wget设置代理的方式如下

  set http_proxy=http://<代理服务器>

  不要忘了多开几个进程,20个试试?

  打开文件

  Q:怎么打开文本文件

  这不是弱智问题。你用记事本打开一个100MB的文件试试

  A:LTF viewer

  Large Text File viewer, 打开速度会让你惊奇

  Q:怎么打开二进制文件

  A:Hex Editor Neo

  你可以通过下面方式来选择进制:

  右击数据区 => Display As => Hex|Decimal|Octal|Binary|Float|Double

  你可以通过下面方式来选择按多少字节显示:

  右击数据区 => Group By => Bytes|Words|Double|Quad

  编程语言

  当数据量很大时,选择语言要慎重了。因为不同语言有不同的特点,你要在编程时间和运行时间之间权衡。

  模型测试

  开始时,一般挑几个小的数据进行测试,获取第一份分析结果。这时当然希望能快速编程实现。脚本语言是一个很好的选择,比如Python。

  大量处理

  开始遍历处理所有数据时,用脚本语言来处理就不太合适了。因为脚本语言的运行时间不能让人接受。另外,还有内存使用,文件读写这些你都没法控制。不幸的是,很少语言会为你处理海量文件做优化。

  这时,C/C++是最好的选择。

  结果展示

  漫长的等待终于过去了,眼看就要出结果了。如果你还执着于陪伴你度过漫长等待的C/C++的话,你迟早会沮丧的。

  我尝试了很多方式之后,得出的结论是,让Matlab来接手C/C++。Matlab能轻而易举地展示大量数据。更重要的是Matlab支持读取二进制文件。

  filename = 'out.bin'; % binary file

  fid = fopen( filename );

  data = fread( fid, itemsNumber, '*uint32');

  fclose(fid); 

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

原文链接:http://publish.itpub.net/a2010/1203/1133/000001133931.shtml

 

 

 

 

posted @ 2010-12-04 09:29 lae 阅读(66) 评论(1) 编辑

2010年12月2日 #

jQuery插件能够增强网站的可用性,有效地改善用户体验,还可以大大减少创建一个新站点的开发时间。现在的jQuery插件很多,尽可以根据您 的项目要求来选择,不过也有一些插件很好用,几乎各种项目都能够用得上。这里就为您介绍12款开发中最常用的jQuery插件。

  1. jQuery BBCode Editor

  下载地址:http://www.w3theme.com/jquery-bbedit/

  Bbcode简单易用,它是BBS、论坛、Blog等网络应用上的一种常用输入语法。jQuery BbCode Editor提供自定义设置,可以打造出很个性化的bbcode编辑器,它的源代码都可以根据需求灵活修改。

1
 

  2. Exposure

  下载地址:http://plugins.jquery.com/project/Exposure/

  Exposure是一个图片预览插件,用于创建丰富,自定义的视觉体验,可以处理海量图片。

1
 

  3. jQuery YouTube Plugin

  下载地址:http://www.tikku.com/jquery-youtube-tubeplayer-plugin

  这个插件基本上是个标准的YouTube播放器API了。开发者省略了一些功能,但足够用了。

1
 

  4. PoshyTip Tooltips

  下载地址:http://vadikom.com/tools/poshy-tip-jquery-plugin-for-stylish-tooltips/

  用它可以很方便地创建工具提示框,很有型哦,而且该有的功能都有了。

1
 

  5. InputNotes jQuery Plugin

  下载地址:http://fredibach.ch/jquery-plugins/inputnotes.php#demo

  一个用于在文本域下方添加注释的jQuery插件,基于正则表达式。

1
 


  6. Infinite Scroll

  下载地址:http://www.infinite-scroll.com/

  用了这个插件,用户访问你的网站就不用翻页啦!实际上它是预读了后续页的内容并将其直接添加到了当前页面。

1
 

  7. jQuery xColor Plugin

  下载地址:http://www.xarg.org/project/jquery-color-plugin-xcolor/

  一个简单易用的混色器。

1
 

  8. Bit.ly jQuery

  下载地址:http://www.moretechtips.net/2010/07/bitly-button-jquery-plugin-for-your.html

  这个插件可以创建能够动态显示点击次数的按钮(方形的或者长方形的),还可以实现文章转推功能。

1
 

  9. Inset Border Effect

  下载地址:http://css-tricks.com/inset-border-effect/

  这是一个非常简单但整洁的效果。它能够给图像加上一个边框,这个边框涵盖了图像的一部分,与CSS做出来的边框是不同的。

1
  


  10. Apple Zoom

  下载地址:http://tutorialzine.com/2010/06/apple-like-retina-effect-jquery-css/

  不多解释了

1
 

  11. jTweetsAnywhere

  下载地址:http://thomasbillenstein.com/jTweetsAnywhere/

  jTweetsAnywhere是一个jQuery 的Twitter小工具,它可以很方便地在网站里添加Twitter功能。

1
 

  12. Form Validation with Hints

   下载地址:http://www.icograma.com/nuestro-trabajo/open-source/jquery-form- validation-and-hints/jquery-form-validation-and-hints-client-side-form-validation.html

  这个jQuery插件使表单验证开发工作更简单了,预置了常见的验证规则,方便开发者自行设置。

1
posted @ 2010-12-02 13:24 lae 阅读(424) 评论(0) 编辑

2010年11月17日 #

posted @ 2010-11-17 15:14 lae 阅读(87) 评论(0) 编辑

2010年11月12日 #

配置文件如下  

代码
<?xml version="1.0"?>
<configuration>
    
<configSections>
        
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate"/>
        
<section name="syscache" type="NHibernate.Caches.SysCache.SysCacheSectionHandler,NHibernate.Caches.SysCache" />
    
</configSections>
    
<connectionStrings>
        
<add name="db" connectionString="Server=.;Database=NHTest;Trusted_Connection=SSPI"/>
        
<add name="nhtest" connectionString="Data Source=orcl; Persist Security Info=True;Integrated Security=False;User ID=nhtest;Password=nhtest;"/>
    
</connectionStrings>

    
<!--Oracle-->
    
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
        
<session-factory>
            
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property>
            
<property name="dialect">NHibernate.Dialect.Oracle10gDialect,NHibernate</property>
            
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver,NHibernate</property>
            
<property name="connection.connection_string_name">nhtest</property>
            
<property name="adonet.batch_size">100</property>
            
<property name="show_sql">true</property>
            
<property name="hbm2ddl.auto">update</property>

            
<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache</property>
            
<!--<property name="cache.use_second_level_cache">true</property>
            
<property name="cache.use_query_cache">true</property>-->

            
<!--<class-cache class="Test.Nh3.Domain, Test.Nh3" region="hourly" usage="read-only"/>-->

        
</session-factory>
    
</hibernate-configuration>
    
<syscache>
        
<cache region="hourly" expiration="60" priority="3" />
    
</syscache>

    
<runtime>
        
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            
<dependentAssembly>
                
<assemblyIdentity name="NHibernate" publicKeyToken="AA95F207798DFDB4" culture="neutral"/>
                
<bindingRedirect oldVersion="0.0.0.0-3.0.0.2002" newVersion="3.0.0.2002"/>
            
</dependentAssembly>
        
</assemblyBinding>
    
</runtime>
</configuration>


 初始化Mapper

代码
 public HbmMapping GetMapping()
        {
            
//初始化ObjectRelationalMapper类
            var orm = new ObjectRelationalMapper();

            
//TablePerClass:每个类一张表映射策略
            
//TablePerClassHierarchy:每个类分层结构一张表映射策略
            
//TablePerConcreteClass:每个具体类一张表映射策略
            orm.TablePerClass<Domain>();
            
//orm.Patterns.Poids.Add(new GuidCombGeneratorDef());
            
//在这里可以调用ObjectRelationalMapper类一些方法配置Domain语义
            
//使用orm参数初始化Mapper类
            var mapper = new Mapper(orm);
            
//在这里可以调用Mapper类一些方法配置Domain的Mapping
            
//调用Mapper类的CompileMappingFor方法编译生成HbmMapping对象
            return mapper.CompileMappingFor(new[] { typeof(Domain) });
           
        }


初始化config

代码
  var nhConfig = new Configuration().Configure();
            nhConfig.AddDeserializedMapping(GetMapping(), 
null);

            
//配置缓存
            nhConfig.SetProperty(NHibernate.Cfg.Environment.UseSecondLevelCache, "true")
                .SetProperty(NHibernate.Cfg.Environment.UseQueryCache, 
"true")
                .Cache(c 
=> c.Provider<SysCacheProvider>())
                .EntityCache
<Domain>(c =>
                {
                    c.Strategy 
= EntityCacheUsage.ReadWrite;
                    c.RegionName 
= "hourly";
                });

            
//配置数据库架构元数据
            
//SchemaMetadataUpdater.QuoteTableAndColumns(nhConfig);
            
//创建数据库架构
            
//new SchemaExport(nhConfig).Create(false, true);

            var factory 
= nhConfig.BuildSessionFactory();

            
using (var s = factory.OpenSession())
            {
                
using (var tx = s.BeginTransaction())
                {
                    var domain 
= new Domain
                    {
                        Name 
= "我的测试" + DateTime.Now.ToString(),
                        Address 
= "中国",
                        Picture
=GetPic()
                    };
          
                    s.Save(domain);
                    tx.Commit();
                }
            }


    尽管配置了缓存,性能问题依然出现在picture保存上面,竟然需要20多秒,期待有人能研究出这个解决办法。

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

 构造领域模型时需要使用如下代码,等同于在*.hbm.xml文件将实体列映射的类型显式声明

 var mapper = new Mapper(orm);
            mapper.Class<Domain>(dm =>
            {
                dm.Property(x => x.Picture,
                            m => m.Type(NHibernate.NHibernateUtil.BinaryBlob));
            }); 

 

posted @ 2010-11-12 13:27 lae 阅读(159) 评论(0) 编辑

2010年7月13日 #

微软回答了他们称之为“关于数据的10个问题”,解释了Oslo、ADO.NET Data Services、WCF、LINQ to SQL、T-SQL以及其它技术的发展情况和未来的计划。

Oslo

微软宣称“会继续开发这些技术”,但不会继续使用“Oslo”这个代号,而是改名为SQL Server Modeling CTP。由于与SQL相关技术的紧密联系,特别是Quadrant(译注:用来查看和修改数据库中数据的工具)和Repository(现在叫做SQL Server Modeling Services),这些技术将来会被集成到SQL Server中。

微软还解释了SQL Server Modeling和.NET之间的联系:它使得创建模型驱动的应用程序更加容易。

ADO.NET Data Services和.NET RIA Services ADO.NET Data Services变成了WCF Data Services,而.NET RIA Services则变成了WCF RIA Services,目的是使WCF成为创建服务和多层应用的一站式框架,ADO.NET Data Services和.NET RIA Services在此方面完善了WCF。

LINQ to SQL

LINQ to SQL在.NET 4.0中将会继续得到增强:

没错,我们会继续开发LINQ to SQL。但是我们会更偏重于Entity Framework,因为此框架是围绕Entity Data Model(EDM)构件的。而EDM代表了微软很多产品的主要战略方向,包括SQL Server、.NET和Visual Studio。

这条消息明确表明:LINQ to SQL将不会被包含在更长远的计划中。

“M”语言

微软对于这个语言的定位很模糊。首先,他们说M将会和Oslo一样,被集成到SQL Server中:

很重要的一点是,SQL Server并不仅仅是一个核心引擎,而是范围更广泛的产品,它包括很多其它的服务和工具。“M”语言及相关的工具将会成为它的一部分,并为其它使用SQL Server的产品所使用。

然后,他们又说:

微软正在整合“M”语言和Entity Data Model,以便Entity Framework和Data Services可以使用。这将导致同一种数据模型拥有两种不同的表现方式:CSDL,目前Entity Data Model所使用的基于XML的语言,更适合互操作;或者“M”语言,更适合开发人员。

目前仍不清楚M语言将会走向何方。可能将会被包含在SQL Server中,但以后将会整合到Entity Data Model中。

“M” vs. T-SQL

由于M语言还没有发布,微软建议目前还是继续使用T-SQL,但以后则会不同:

一旦“M”语言发布,就可以使用“M”语言在更高的抽象层次描述问题域。然后可以将“M”语言转换为成T-SQL、C#或者其他格式,以便在本地运行环境中做进一步的优化。

WCF Data Services

微软强调了.NET 4.0和VS 2010中包含的WCF Data Services新特性:

  • 双向数据绑定
  • 计算数据的总行数
  • Feed定制化
  • 服务器端分页
  • 增强的BLOB支持
  • 为Custom Provider Writers 提供的新的“Data Service Provider”接口
  • Projections

ADO.NET Entity Framework

ADO.NET Entity Framework最重要的特性是:

  • 外键
  • 支持POCO
  • 新模型默认使用延迟加载
  • 为Query Extender和POCO提供的EntityDataSource
  • 支持二进制类型的主键和外键
  • ObjectMaterialized事件
  • 改进的Object Service API,支持N层架构和Self Tracking Entities
  • 改进的SQL生成机制
  • Navigation Property管理
  • 改进数据库生成机制
  • 新的扩展API
  • 根据存储过程的返回值生成复杂类型
  • 改进的管理工具
  • 改进的LINQ to Entities
微软还解释了什么是Quadrant-“用于显示、查询和编辑SQL数据库中数据的工具,具有多种不同的视图,如树形、列表、表格以及master/detail”,以及什么是Open Data Protocol(OData),
posted @ 2010-07-13 19:26 lae 阅读(124) 评论(0) 编辑

2010年4月16日 #

摘要: 1. 引言 大多数数据访问程序包提供从“数据库外”访问,意思是这种方式将您的数据库的表在应用程序中用对象表示。这种方式可以在大多数案例中工作,但是关系理论与面向对象编程将变的不一致,即“错误的匹配”。 许多人喜欢只使用类工作,但不想关心数据库的具体实现。为了释放他们的工作,同时又不开放数据库设计内部实现。SubSonic创建了一个免费基类且单独存...阅读全文
posted @ 2010-04-16 22:52 lae 阅读(1035) 评论(4) 编辑

2009年11月25日 #

摘要: System.Data.OracleClient在插入大字段类型的时候有32K大小限制,据网络收集的一些方法,整理了一下如下(微软企业库示例):必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。 还可以通过调用 DBMS_LOB.CREATETEMPORARY 系统存储过程并绑定 LOB 输出参数打开 Oracle 中的临时 LOB。在客户端,...阅读全文
posted @ 2009-11-25 17:04 lae 阅读(193) 评论(0) 编辑

2009年9月21日 #

摘要: 本文导读: 1 引言 2 高级应用 2.1 查询 2.2 事务 3 结论 4 附件 5 参考文献1 引言在《SubSonic入门(上)》一文中介绍了一些SubSonic入门的知识,本文旨在探讨SubSonic更深入的应用,为实际项目中的应用提高生产效率和质量。2 进阶应用2.1 查询2.1.1 关联查询//查询Product表中产品关联的种类名称,并且CategoryID大于4的记录DataSe...阅读全文
posted @ 2009-09-21 18:04 lae 阅读(853) 评论(6) 编辑

摘要: 本文导读: 1 引言 2 使用步骤 2.1 配置 2.2 操作数据 3 结论 4 附件 5 参考文献1 引言SubSonic是一个类似Rails的开源.NET项目。你可以把它看作是一把瑞士军刀,它可以用来构建Website和通过ORM方式来访问数据。Rob Conery和Eric Kemp是推动SubSonic的主要开发人员,与项目良好的发展有着密切的关系。作为一个开发人员生产力工具,SubSo...阅读全文
posted @ 2009-09-21 18:02 lae 阅读(1268) 评论(1) 编辑

2008年10月23日 #

摘要: 使用SubSonic生成的controller类提供的FetchByID()方法根据主键字段获取对象集合时,在Oracle数据库中出现"ORA-00904"错误。 提请大家修改源代码OracleDataProvider.cs文件808行“query = select + columns + " FROM " + table.Name + where + order;”-》&...阅读全文
posted @ 2008-10-23 14:27 lae 阅读(478) 评论(1) 编辑