AzureDirectory Library for Lucene.Net(续)

AzureDirectory Library for Lucene.Net(续)

昨天分享过一篇文章《AzureDirectory Library for Lucene.Net》,关于Azure下的全文检索解决方案。补充说明一些内容:

 

原来对“AzureDirectory Library for Lucene.Net”确实有欠了解,在有了一次教训后,现在有了更深入了解(但还是经验主义,没有足够严谨去看看源码,欢迎斧正)。这个的本质并非是把Azure Store当虚拟磁盘用,开始我还真是这么理解的,所以我被它坑了!其实它是本地建个缓存目录,在检索或建索引的时候把索引文件先从Azure Storage同步到缓存目录,然后每次建索引indexwriter dispose的时候把内容同步过去,如果索引文件大,这就对缓存目录大小要求极高!如果你用内存当缓存目录,那你就要足够大的内存。

 

如果是用Azure的WebSite,共享模式,给你的磁盘空间是1G,再加上一些程序文件,它会把索引文件缓存到你的临时目录,一会就满了,会导致你网站不正常,升级到保留模式后,选择最小的实例,空间会到10G,基本够用。

 

如果用它的话,建议用WebRole,相对磁盘空间大一些,特小实例(其实价格和WebSite的共享模式是一样的)有20G空间,加上几个G的系统文件,还能有十几个G。另外如果用WebRole或WorkRole,AzureDirectory对应的缓存目录最好设置在Local Resource(本地资源)下的Local Storage(本地存储),并且给它配置足够大的空间,这样你就不担心报磁盘空间不足的错误。为什么要用Local Storage而不是Web Role/Worker Role的C盘D盘呢?主要两个问题:一个是默认对C盘和D盘下目录没有写入权限,每次虚机回收后,需要远程桌面登录上去配置权限或写启动脚本去做这事;另外用Local Storage你才好方便的配置空间大小的,其他目录似乎超出一定范围就会报空间不足的错误(这个待确认,没有找到资料,从异常信息来看,到一定大小后会有磁盘空间不足的异常,包括Local Storage的空间如果没有指定具体大小,设置为默认,也会到一定大小后报磁盘空间不足的异常)。

 

我现在索引文件大小应该在10G左右,所以我选了一个小实例的Web Role,用来缓存索引文件的Local Storage给它配了100G的空间,相信足够用很长一段时间了。并且我把建索引的工作也放到Web Role来做了,一者少开一个Worker Role省钱,二者建索引和读索引的缓存目录可以共用,读索引就不必频繁去从Storage同步索引文件回到本地。但要注意建索引会占用较高CPU,所以如果放在WebRole里面去建索引,每次应该建少量索引,不要一次太多。

 

总的来说,Azure还是非常好的东西,但是很多开发模式和架构思想已经和原来都不一样了,如果用老的思路去设计基于Azure的系统,会走不少弯路,希望大家多多分享交流。

 

搜索效果演示:http://www.openlab.co/search?

博客一年: 心理之旅

q=%E8%A5%BF%E5%B7%A5%E5%A4%A7+and+%E5%AE%9D%E7%8E%89

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

 

博客园的园龄正式变为一年。最近的一年里,我在博客园写了下面一些系列的文章,共计138篇:

这两天,我回头读了自己写的东西。虽然有很多不成熟的地方,但每一篇文章都是对当时思维活动的真实记述。这些思维活动隐藏在文字背后,只有我自己才能读到。最近又读了一些心理学的书,忽然想,为什么不能记述一下从学习到写博分享的整个认知创作的过程呢?这样一个隐藏心理维度,说不定会有趣。

(关于写博的好处,我已经写在为什么要写技术博,这一篇算是方法论)

 

也以一次快乐的心理之旅,纪念过去的一年。

 

开始学习

开始学习并不容易。人会无意识的回避自己不熟悉的东西。潜意识中,大脑喜欢激发自动化的神经回路。学习的一些环节需要有很强的意识参与,需要长时间的保持注意力,这对于大脑都不是那么容易。学习又富有挑战。在学习中,学习者需要勇敢地失去自己,再努力地重建自己。挑战旧有的想法和无知,融合入新的知识和感触。就好像走路一样,每一步都是先失去平衡,再重建平衡。在失衡和平衡之间,人最终懂得如何前进。

 

做出学习的决定并不容易。人们普遍认为,决定是理性判断和主观意志的产物。我们先判断事情的利弊,然后动用意志来让自己执行。然而,大量的心理学实验表明,人在理性思考之前,就已经做出了决定。事实上,大脑每时每刻都在经受着感官系统的信号轰炸。这些感官信号在呈现给意识层之前,就已经被潜意识层处理(或者说扭曲)。是否开始学习,在我们思考这个问题的时候,潜意识已经进行了许多衡量。我们可以减少诱惑潜意识的干扰信号: 是否觉得饥饿,是否觉得口渴,是否困了,是否坐得舒服…… 如果有上面的信号,那么最好先去满足身体诉求,而不是强制自己坐在书桌前。另一方面,我们可以训练自己的自动感知系统。尽管学习是个充满挑战的过程,但战胜挑战会带来多巴胺的强烈释放,给人带来快乐,从而让人主动寻求挑战。我们先进行一些简单的学习,在大脑习惯了之后,逐步增加学习的内容和难度,从而不断强化学习-掌握-学习的神经回路,最终培养对学习的自动自发的欲望。

 

人的行为受到环境的强烈影响,包括硬性的外部环境和软性的社会环境。学习时,可以选择一个自己喜欢的学习环境。每个人适合的环境不同。并不是所有的人都适合坐在安静的房间里学习。如果你觉得自己坐在街边的学习效率更高,那么完全可以拿着书,坐在街边看。事实上,人们在学习过程中,是将书本知识和外部环境的感受融合在一起吸收的。一个自己喜欢的学习环境,往往可以更好的融合知识内容。软性的社会环境甚至更重要。我们总是无意识的模仿他人的动作,模拟他人的想法。当周围的朋友热爱学习,并有一些优秀的学习习惯时,那么我们会很自然的模仿,并养成类似的习惯。当我们崇拜和喜爱的人讲述他们的经历时,我们会在大脑中重现相似的场景。融入到优秀的学习群体或者社区中,才能深入掌握一个技能。

 

阅读与笔记

学习技术最基本的方式是阅读。无论是哪一种技术,可以选择的阅读资料总是很多。经典资料是个不错的出发点。到豆瓣上搜索一下关键字,然后根据评分选择合适的书。StackOverflow和一些博客也会列出许多经典的书单。然而经典书籍并非一个限制。同一本书可能并不适用于所有人(即使许多人承认它是经典)。阅读是一种寻求共鸣的过程,而不是单方面的灌输。如果在阅读中,这本书无法唤起共鸣,你觉得枯燥,那么不必犹豫,你大可以换一本更符合自己口味的书。此外,一本书中的内容显得复杂或深奥,往往是因为我们缺乏更加基础的东西。我们可以去寻找一些更基础性的内容来读。比如,如果没有http协议的背景知识,那么web框架的内容就会显得过分的复杂。这个时候,与其在密林中挣扎,不如减少复杂性,花些时间学习基础内容。

 

阅读时,笔记是个不错的习惯。你可以边读边在本子上记下一两句唤起共鸣的话,也可以阅读一个章节之后,记下脑海中印象深刻的部分。如果条件允许,你还可以用高亮笔在资料上写写画画,在页边写笔记。你也可以使用手机,录制自己的感想。网上也有许多别人总结的reference card和笔记,你可以以此为基础整理笔记。方式的选择是根据喜好,重要的是,任何一种笔记都将成为重构记忆的线索。笔记的意义不限于具体的知识,更在于它能唤醒你曾经阅读时的微妙感触。放下书,这些笔记可以提示你阅读时的“感知”和“触觉”。大脑可以根据这些感触,重建起整本书的内容。人的回忆过程与计算机存储不同。回忆并不是固定存储于某些神经元的。回忆作为一个神经网络散布在大脑中的。当我们回忆时,我们根据线索,唤醒大脑的运动、感知、情绪等等区域,来“重构”回忆情境,以及情境中所包含的知识内容。

 

为了掌握一门技术,读一本书可能是不够的,即使这本书中包含有全部的内容。对于大脑来说,知识并不是一块物理性的东西,从外部转移到大脑内部。知识更多的是一种叙述的韵律,一种生动的感知。从多本书中体会不同的叙述方式,从多个角度去理解和思考,才能在大脑中构建一个生动的知识网络。即使只有一本书,也可以通过多次阅读,形成多重的感触,从而加深掌握(由于你已经一定程度上了解了相关知识,这样的重复阅读并不会花费太多的时间,却有意想不到的好处)。一些花边知识,比如该技术的历史、发明者的趣闻、充满geek气的笑话,能让我们将感情代入到技术,从而更加牢固的掌握知识。

 

实验

学习计算机技术的一大好处是可以迅速实验学到的知识。我们可以通过编程来检验自己是否掌握了知识,或者通过编程来理解还非常生疏的知识。动手是人学习的一个基本途径。在小的时候,我们通过动手,来学习物体的下落和投掷的规律。动手实验的好处是更加充分的调动大脑的不同区域,提供阅读所无法达到的多重体验,从而巩固知识。编程又可以提供给我们即时的反馈,以便纠正错误的回路,让知识进化,形成深度学习。神经网络系统就是模仿大脑,通过不断的尝试和犯错,纠正错误的回路,最终掌握某项技能(比如汽车自动驾驶)。

 

编程带来一种“我在改变世界”的独特心理体验。程序员的一个普遍爱好是通过编程,来控制某个实物。比如CMU那台被计算机控制的可乐自动售卖机。这样一种心理体验让程序员的工作有一种传奇感。这样一种近似于虚幻的传奇感,能良性的促进程序员的学习和成长。正如Eric Raymond观察的那样,许多伟大的程序员同时也会是科幻小说的爱好者。编程和科幻交织在一起,为程序员的生活带来传奇感、使命感、故事感和“意义”。这样的一种态度,可以让人更加积极健康的心态生活,更容易达到精神上的富足和宁静。这是一种比收入和声望更加持久的动力。

(对于我来说,“意义”除了改变世界,还包括分享和社区感,见这一篇社区与关怀。在人生的许多阶段,人都会跳出“人生的意义”的问题和对存在的质疑。我现在有一个可以暂时回答自己的答案了。)

 

写作

写博客并不是简单的复述。它是一次有趣的再创作。你学习了知识,熟练了编程技巧,开始想要写作。你就好像米开朗基罗,面对着一块天然的大理石。回顾是必不可少的,正如抚摸和熟悉大理石上的纹理。你需要不断的想象,在大脑中设想文章的主题、风格、配图…… 在脑海中尝试不同的组合方式。这个时候,你是有意识的想,刻意的设计,然而并不满意。于是,你搁置有意识的思考,去运动,洗个澡,睡觉。在你的意识之外,大脑的潜意识继续工作,混合旧的和新的,组合这个领域和另外一个领域。然后在某个瞬间,你忽然意识到,你有了组织整篇文章的主题,有了一个绝妙的比喻。这就是创造

 

写作会带来混合的效果。它像是一份笔记,也像是一次动手实验。它可以作为你未来回忆的线索,也可以为你带来快速的反馈。写作的独特性在于它的社交性。写作是一个和读者交流和沟通的过程,你通过真实的分享来获得读者的共鸣。下面是我采用的一些写作原则。

  • 使用清晰的、通用的语法。
  • 一个语言片段只表达一个简单明了的意思。
  • 幽默和意外是好的提神剂。
  • 高亮和图像让人更容易把握含义。

采用这些原则的目的是形成更一致的风格。每个人的写作习惯不同,有的人喜欢以更加诗意、有韵律的方式;有的人喜欢更多的词汇和典故。读者会有不同的风格取向。实际上,读者在阅读时,也是在脑海中回旋和重建,在读一个句子时,潜意识的猜想下一个句的内容。如果预测准确,读者就会感受到共鸣。一致的风格可以更容易得到这种共鸣感。

(然而,好的音乐不是重复。在风格一致的基础上,要有变化,才能更加丰富。)

 

有时写作可能变得很痛苦,甚至很长一段时间不愿写东西。特别是得到了赞誉之后,我会觉得不知道如何保持相同的水平,担心下一篇文章的水准。我发现有两个调整的方式:

  • 大量阅读,重复体验,造成潜意识的不断工作,觉得有话要说。
  • 写标题,写目录,写日志,再不断增删改。

当然,还有一个方式是: 放大话。这是一个很强有力的武器。人总是希望在社交中信守诺言,保持一致的形象。大话放出去,潜意识中保持一致的力量会促使你朝着“大话”的方向努力。比如,我说自己要写“网络协议”系列文章的时候,一开始并没有完全构思好。但话说出去,就不知不觉的有一种责任感,觉得要写,不能停。直到回头看,才发现自己真的写了不少。

 

下一年

好吧,我要放大话了。下一年计划:

1. 补充和完成现有的文章

2. 深入到新的领域,特别是:

  • 数据库
  • 信号处理
  • 统计,数据分析,机器学习
  • 编程社区与创业团队

3. 写书

  • 以某个系列的文章为基础,完成一本实体书

 

谢谢你们上一年的阅读、纠错、监督和支持。请继续!

Vamei

 

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

 

 

 

 
标签:  心理学

 

你可能感兴趣的:(心理学)