惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
Cisco Talos Blog
Cisco Talos Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Scott Helme
Scott Helme
Project Zero
Project Zero
E
Exploit-DB.com RSS Feed
S
Secure Thoughts
K
Kaspersky official blog
L
Lohrmann on Cybersecurity
NISL@THU
NISL@THU
WordPress大学
WordPress大学
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
小众软件
小众软件
P
Privacy & Cybersecurity Law Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Hacker News: Ask HN
Hacker News: Ask HN
AWS News Blog
AWS News Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hacker News: Front Page
F
Full Disclosure
Latest news
Latest news
Schneier on Security
Schneier on Security
The Hacker News
The Hacker News
T
Troy Hunt's Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
Martin Fowler
Martin Fowler
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
G
GRAHAM CLULEY
Forbes - Security
Forbes - Security
V
V2EX - 技术
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Vulnerabilities – Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
P
Privacy International News Feed
C
Check Point Blog
N
News and Events Feed by Topic

博客园 - xvhfeng

blog搬迁 2012 年度总结 2011年年度总结 albian使用方法-1 albian开发笔记六-albian的架构 hashTable和多线程问题 albian开发笔记五--谈缓存同步 albian开发笔记四 albian开发笔记二 albian开发笔记一 Albian开发库的设计与规划 《程序员入职锦囊妙计》终于完成了 FastMQ V0.2.0 stable版发布 实现线程内同一对象 发现你的优势测评结果 DFS架构 FastMQ V0.1.1使用方法 开源消息队列FastMQ V0.1.0 发布 linux环境C编程的血泪教训
albian开发笔记三
xvhfeng · 2011-07-11 · via 博客园 - xvhfeng

        这个星期虽然工作很忙,但是albian的开发进度还是没有拉下。目前albian已经完成了简单的IOC功能(至少对于albian够用了);还有albian的ORM已经完成的差不多了,下个星期应该可以完成ORM,但是不带cache的。

      这个星期的开发中,也碰到了一些问题。记录下来和大家一起探讨。如果对于这些问题有更好的解决方案,欢迎联系我。

      1.ORM中的Save功能。其实Save功能很简单,它主要完成的工作就是向数据库中insert或者update一条数据。当需要save的记录不存在于数据库中时,就采用insert操作;当需要save的记录已经存在数据库中时就采用update操作。开始我是想使用Exists,大概的意思就是这样 if exists select 1 from table where pk update……. else insert….,但是因为albian需要支持异构数据库,这条语句在mysql中不能被执行,只能作罢。但是save功能一定要提供,所以只能另找出路。想到了按照不同的数据库采用不同的方法,比如刚刚那个if exists select 1 from table where pk update……. else insert….结构就用在mssql中,然后mysql中使用mysql的方言提供……,这倒未必不是一个好的办法。但是在这种办法的实现在代码上有一定的臃肿而且增加了难度,至少3个方法,然后委托执行。然后就想到了另外一个办法:使用显示的本地对象属性和alibian的orm中所拥有的isnew属性,这样就可以区分对象是否是新的。然后按照isnew属性拼凑sql语句,当isnew为true时需要insert,反之则update。这样既不会出现臃肿的sql语句,还会准确的表达代码的意义。唯一的不好就是需要在每个使用albian orm的数据层对象类实现中需要实现IAlbianObject接口,虽然以前也要实现IAlbianObject接口,但是现在的接口已经不是简单的签名接口了,需要实现两个属性,一个数Id(即数据库的主键),一个是IsNew属性。幸好只是属性,所以实现这个接口需要花的时间不长,而且也非常简单,只是简单的实现属性即可。

     2.IOC的问题。以前也用过IOC,比如spring等等!但是这些IOC给我的感觉就是太重了。虽然spring其实来自于j2ee的改良,但是对于一般的app来说还是太重,配置太多、太复杂。几乎支持了所能想到的所有的注入方式。但是对于Albian来说,其实它的重点在于ORM(其实99%的app重点都是在于和数据库交互),所以IOC只要是够用就可以了。鉴于这个思想,albian实现了一个super轻量级的IOC,不过已经完成了最简单最实用的定义和实现分离。不过虽然简单,albian IOC还是支持loading所有的ioc对象,并且没有前后位置关系的限制;但是对于相互交叉使用的对象,在启动时会报异常,需要程序员通过别的方式来完成相应的功能。

      3.构建查询。对于一个企业级的框架而言,特别是在电子商务这种行业,数据库查询功能永远都是最重要的。在构建查询的时候,曾经想过为了数据库吞吐增加效率,增加查询时指定字段的功能,在实践中,确实也增加了这些功能的接口。但是真正在开发过程中发现了此举其实并不一定增加了app的运营效率。从数据库访问来看,增加了需要查询的指定字段,确实增加了数据库的吞吐效率,因为使用指定字段时每次都会load需要的字段,那些不需要的字段就不会被select出来,这样加快了数据库的查询速度,减少了数据库的吞吐量。但是从整个app(db+app应用程序)来看,其实有的时候反而倒是会减少了整体效率。原因是假设我们的读写比例是4:1(已经很少了,基本上都在9:1左右),我们一个展示功能不太可能只是用一次的指定相同字段查询就可以完成,所以如果采用指定字段,就会出现一个cache过多并且命中率下降的问题。但是如果不指定字段,那么不管你查询什么字段,只要你的pid一样,我就可以优先使用缓存中的对象,这样可以极大的减少对于数据库的压力,而且如果使用本地缓存,那么对于多服务器的缓存同步问题也会容易很多。所以从app的整体考虑点出发,最终还是放弃了指定字段接口,但是这个功能不是没有用处。比如taobao、ebay,当数据库中的表字段多到一定的量,而且当缓存同步的代价小于多缓存内存消耗的代价时,这个接口就有用了。

      后面的事情:

      接下来的事情主要就是完成ORM,目前留下的工作就是完成查询功能和缓存功能。缓存提供两种接口:分布式缓存和本地缓存。故因为可能会启用本地缓存,所以需要增加缓存同步的功能。这部分工作原来准备使用remoting完成,但是后来想到可能很多公司一个系统本身就是异构平台的,而且albian本来就打算后面会移植到java去,所以albian本身也是异构平台的,这部分开发应该会使用原始的TCP来完成。同步服务器程序会使用基于linux的c来完成。完成了同步程序后,对于大型的app还需要一个分布式锁服务器,这部分开发也会使用linux的c来完成。当这些都完成后,albian看上去就会像一个样子了。