• Hawk:开源贡献计划,设计,反思


    Hawk在发布之后,收到了不少朋友的感谢和使用反馈,沙漠君表示非常开心。软件肯定有很多的问题和不足,还有很多可扩展的空间,因此我希望更多的朋友,能够参与到改进Hawk的计划中来,为开源世界作出努力。

    不少朋友询问一些术语的意思,在下面解释一下:

    • ETL:即数据清洗,包含抽取(E),转换(T)和加载(L)
    • 行,列: 在数据表格上的行列
    • 流,子流:一个流代表一组模块构成链条,子流也是流,只不过是被别的流调用的,可以将流理解为函数
    • 模块:构成流中的一个个的组件,分为生成,转换,过滤和执行
    • 合并多列:将多行数据合并到一行
    • 一般的转换器:将一列数据转换到另外一列或多列

    在设计上,Hawk不打算提供完整的运行环境,例如定时运行,分布式部署等功能,它仅仅提供一个设计IDE,生成的xml文件交给其他解释器来执行。大家都会用eclipse开发网站,但没人会把它当容器直接部署。

    下一步的计划:

    • 完善etlpy,其目前只支持Hawk的一部分子集,尚不能支持子流等功能(急需改进),而且还有一堆问题
    • 开发基于.NET.Core的跨平台解释器,核心代码可原封不动的移植
    • 添加其他数据库的连接器:目前只包含了MongoDB,建议增加MySQL和SQL Server的连接器。下面会简单介绍如何添加
    • 优化Excel导出器:目前使用NPOI的类库,性能较差
    • 软件国际化,将界面改为英文,提供其他语言的本地化支持
    • 进一步优化核心算法,改bug

    那为什么没有开发呢?因为没那么多时间啊,急需开源社区的贡献啊...

    贡献方法:修改和优化代码后,在GitHub上提交合并请求,我负责将其合并到主分支上。

    2. Hawk代码结构

    Hawk采用插件式结构,所有的组件都是可分离的。插件系统是沙漠君自行设计的,非常类似于MEF框架。

    使用绑定技术,MVVM结构,界面和逻辑分离。
    工程文件介绍如下:

    • Hawk.Core 底层基础类库
    • Hawk.ETL 数据清洗和爬虫插件库
    • Hawk.ETL.Controls 界面库
    • HawK.exe 可执行程序和插件容器

    核心的需要修改的代码,都位于Hawk.ETL和Hawk.Core中。

    实现新的连接器

    以实现MySQL支持为例,在Hawk.Core.Connectors目录中,新建MySQLConnector.cs文件,创建对应的类,从DBConnectorBase继承。
    在类上添加attribute,结构如下:
    [XFrmWork("MySQLConnector")]
    public class MySQLConnector
    {
    //implement interface IDataBaseConnector
    }

    实现新的ETL组件

    如果你想开发新的组件,完全可以参考已有的代码。但一些特别简单的功能,不建议再开发新的插件,而是直接使用Python转换器即可。

    3.一些设计上的考量

    Hawk开发了四年,之前远远不是现在的样子。源头可参考博客园上关于ITTC数据挖掘工具的文章。
    数据清洗和爬虫,本来是这个平台很小的一部分功能,后来被不断强化,而其他功能都被删减掉了。

    我现在越来越认可“只做一件事,并将其做好”的理念,没有必要把数据分析挖掘功能添加到软件之中,因为已经有更好的工具完成这件事了。也没必要为其设计过多的策略,如增量,定时等等复杂的东西。

    如果真要设计增量更新,完全可以通过读取数据库或网页上的某个字段作为生成器参数,之后按照一般流程进行即可。而定时抓取,这属于运行时的范畴,使用crontab等等即可,只可惜现在还没有一个稳定可靠的Python或C#命令行实现。

    比如你真的要对两个主键进行唯一性去重,那完全可以把这两个主键组合起来,然后再使用唯一性去重。工具应当提供地足够原子化,这样才能更好的扩展组合。

    Hawk其实定义了一种语言,你不能把它当成厨子,给它指令,它就能做出一道菜来。而应该当成一组顺手的餐具,而真正做菜的那个人还是你。自动化只是解决了部分问题,而巧妙设计的源泉还是来自于操作者本人。

    Hawk最大的价值,是将复杂的逻辑链条化了,你可以将代码变得不那么耦合,从而方便地组合和开关某些功能。当然这些都拜于函数式编程的思想所赐。

    说起继续维护它,那是肯定的。只是它的核心代码用C#实现,同时维护几种语言的版本是非常恼人的,而我以后的工作语言,可能再也不会是C#了。这一点异常蛋疼。

    Hawk本身的界面设计,被很多人,也会被更多的人吐槽。因为我本人不是设计出身,我只能尽量去做出一个能用的东西出来,至于好不好用,那真是没法控制了,哎。

    不得不说,开源才是最贵的。大家看到开源,欢欣雀跃,以为在路上捡到了钱,其实不是的,如果你真想用起来,一定会花更多的时间来学习它,因为开源者没有义务像商业软件那样,提供完整的支持。时间和钱总是矛盾的,既想省钱还想省时间,天下没有这样的好事。

    如果说我后悔没做什么,是我没有把软件做成英文,曾经有一段时间我个人非常崇尚中文编程,从而酿成了现在软件国际化异常困难的后果;再者,没有直接开发Python或者js这种能跨平台语言的版本,因此只能局限于桌面应用,而不同的社群就风气又不一样了。

    当然,市面上还有火车头和八爪鱼这样的采集工具,我自己从来不愿意把Hawk定义为爬虫,火车头之于Hawk,有点像vim和EMacs的关系。Hawk提供的是一组环境,语言和工具。而火车头则专门在爬虫领域完成了一个特定的子集。孰优孰劣,尚难定论。

    关于文档的事情,不少朋友都要求提供完整的文档。我实在不喜欢写文档,因为代码就在那里,如果不愿意看代码,那文档自然也是不爱看的。我假定每个用我软件的人都能触类旁通,因此通过一些通用的介绍,他应该就能理解绝大多数的功能。我不把使用者当傻子。那如果真的不懂代码呢?那不好意思,请用八爪鱼,否则Hawk的很多设计,对他来说就变得没有意义。

    有朋友说,为什么你要开源,对自己来说是不是有点像代码外泄?我笑了笑说,嗨,我根本不care。谷歌的TensorFlow都开源了。牛逼的人都去开源代码,因为它们知道前面的路还有很远,都要忙着赶路呢,那些傻逼们才抱着自己手里的泥饭碗生怕别人抢走呢。再说一遍,我不care

    前一段文字是出发前在机场敲的,后来这些文字是在我刚从厦门旅行归来,跑到泉州的一家寺庙旁边的宾馆敲的,戾气有点重啊,会不会被未来的朋友看到,觉得我本人不够nice呢?有可能吧。Anyway, Hawk是鹰,不是绵羊或麻雀,酒吧的酒保不会因为你善良,就不会去坑你的。我的地盘,所以要听我的。而且我还要抓紧时间赶路。

    祝大家用软件用的愉快,欢迎随时给我反馈。大家共同改进。

    恩,以上。
    (浓浓而又脑残的知乎风结尾)

  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/buptzym/p/5544311.html
Copyright © 2020-2023  润新知