All posts by 龙生

卧室门对厕所门风水

解决的方法:
厕所门对卧室门的话,一是把厕所门改在西边位置,也就是进门这个走廊位置开门,这样就可以避免了厕所门和卧室门相对的问题.
第二:可以在厕所门外挂个竹帘或水晶帘,不用挂整条到地的帘子,可以挂一半的那种就可以.
第三:也可以在卧室门口挂葫芦.
第四:改变卫生间门的方向,或是做成暗门,厕所要保持干净整洁,而且要干燥,通风要好,不用时尽量把厕所门关闭.
卧室门对厕所门风水大全

卧室是家中最重要的房间之一,良好的卧室风水可使家庭和乐,身体健康,婚姻美满,财源丰富。卧室首先看重的是要有足够的阴能量,以营造适合休息和睡眠的空间,且不可存有煞气,才能安心入睡,睡得好,自然就有精神赚钱。卧室是家中最具个人特质的空间,在布置卧室时只要注意以下不宜之事项,就可以轻松拥有卧室的开运好风水。下面风水大师将为朋友们介绍卧室风水中的十五大禁忌,希望对您有所帮助:

1. 卧室风水禁忌一:卧室不宜无采光功能

卧室内最好有对外窗户,一来有采光功能,晨昏辩、日月明、阴阳不倒置,会培养出优良的磁场及动力。风水大师刘椰荣提醒你窗户的设置可不是越多越好,窗户虽有将秽气排出屋外的功能,但既然是气口,也有引煞入室的可能,房间内若窗户过多,可以加上窗帘遮挡,可提升房中的好运磁场,对于西晒等令人不适的光线,用厚的窗帘也能有效控制。

2. 卧室风水禁忌二:卧室外形不宜斜边凸角

卧室形状应方正,斜边或多角形并不恰当,会造成视觉及精神上的压迫,身体也会经常患病不适,卧室的形状太过奇怪,福气不宜聚纳,会破坏命理学上的布局。想要改善格局,启动八卦福源,可在缺角处的墙上挂上镜子,使缺角补齐,但须注意不可使镜子形成新的冲煞;若房间够大,以屏风将卧室主要区域隔出,不规则区域另做他用,也是一个良方。

3. 卧室风水禁忌三:不要把卧室当仓库

不要把卧室当仓库,床上除了枕头及叠好的棉被及抱枕之外,不要再堆放其他杂物或衣裤袜子,不要让宠物进到卧室来。

4. 卧室风水禁忌四:房门不可正对卫生间

卫生间的机能是负责排泄清洁沐浴,会聚集秽气和湿气,若卫浴的门在卧室门的对面,会对卧室的磁场产生影响,遇到这种情况,风水大师刘椰荣建议你可把卧室及卫生间的门上装上门帘,阻断两个磁场地间直接的气场流动。若格局允许,可加强卧室、卫浴之间通道的通风,将厕所中的秽气直接导出户外也有帮助。

5. 卧室风水禁忌五:卧室不可正对厨房

厨房是烹饪的地方,会产生高温与油烟,若厨房与卧室的门正对,热气与油烟会直接飘进房内,弄得卧室油腻、燥热,生活空间披着油垢,对财运会产生负面影响,最好将厨房门与房门关上,尤其正对着的时候应在中间加屏风或长门帘,才不会让气场相通混淆。卧室也不宜与厨房相邻,尤其是床紧贴在炉灶所靠着的墙面,人在火上烧绝非好事,应将床位移到别的墙面。
6. 卧室风水禁忌六:卧室不可对大门

卧室是休息的地方,能够不受打扰,并使个人感到隐秘安全,才能让居住者全面放松,达到充分休息的目的。大门是家人、客人进出必经的地方,与卧室恰为相反的空间特质,所以风水大师刘椰荣提醒你卧室门对大门会对财运与健康造成不良影响,应以屏风隔开,或悬挂门帘来转运。

7. 卧室风水禁忌七:镜子与落地门窗不宜对床

镜子是用来挡煞,作用是把煞气反射回去,所以不可对床。尤其人们从睡梦中醒来,在意识不很清楚时,轻易被映在镜子或落地窗里的自己所惊吓。

8. 卧室风水禁忌八:房门不可对镜子

镜子有反射作用,在风水上可将煞气反射回去,所以可挡凶煞。但是镜子对着房门会将凶煞冲克照进卧室,招来不好运势。

9. 卧室风水禁忌九:睡床或床头不宜对正房门

睡觉时最讲求安全、安静和稳定,房门是进出房间必经之所,因此房门不可对正睡床或床头。否则睡床上的人轻易缺乏安全感,并且有损健康。

10. 卧室风水禁忌十:床头不可紧贴窗口

窗户为理气进出之所,所以床头贴近窗口轻易犯冲。在睡床上的人因看不见头上的窗口,轻易缺乏安全感,造成精神紧张,影响健康。
11. 卧室风水禁忌十一:床头不可在横梁下

天花板宜平坦,忌有横梁。横梁在心理上轻易产生重体的感觉,尤其人睡在横梁之下会感受到莫大的压力,造成精神上的压迫,影响健康、事业。

12. 卧室风水禁忌十二:床头忌讳不靠墙壁

人平躺时不轻易看见头顶上,所以床头宜靠墙、避免露空,而减少安全感。否则睡在床上的人,轻易精神恍惚、疑神疑鬼,影响健康、事业。

13. 卧室风水禁忌十三:床应加高离开地面

风水大师建议你床面应离开地面50公分左右,床底必需保持清洁,不宜堆积杂物。离开地面,并且不堆积杂物能保持床底空气畅通,减少地面湿气渗透入床垫,而影响健康。

14. 卧室风水禁忌十四:卧室不宜摆有刺植物

卧室追求雅洁、宁静舒适的气氛,放置植物有助于提升休息与睡眠的质量。但由于空间有限,应以中小盆或吊盆植物为主。卧室内不宜摆放有刺植物,如仙人掌、龙骨等,否则会影响家人的健康。

15. 卧室风水禁忌十五:浴厕不宜改成卧室

现代大楼管线整体施工,所以整栋大楼浴厕都设在同一地方。假如将浴厕改为卧室,势必造成睡在楼上和楼下两层的浴厕当中,而浴厕本为潮湿、不洁之所,夹在当中必然对环境卫生有所影响,另外风水大师刘椰荣再次提醒您当楼上马桶、水管一开动也绝对会影响到您的安宁,所以对人的身心健康造成伤害。
卫生间的门对着卧室门风水怎么解决?

门口对冲厕所门的化解方法:

解决方法:玄关是根本的决绝办法。

若空间不允许摆放,可以用我下面的方法。

a 在厕所门挂一幅珠帘。
b  在卫生间门口摆放植物,这种植物要圆叶、厚叶、有主干的.
c 卫生间的净化:
经常打开卫生间的窗户,并且把门关闭,让秽气排除,不要往屋里、大厅排,打开卫生间门通风那秽气都往客厅排那是不对的,秽气不要进客厅。净化最简单好用的就是用盐巴,盐巴可以避邪 。

from:http://www.azg168.cn/jiajufengshui/2012-07-22/home51889.html

冰箱的摆放风水禁忌

摆置冰箱有哪些风水禁忌
  1、冰箱不宜正对炉火:会导致家中女性身体多疾病与夫妻争执丶对立。有这种情况,冰箱要离炉火远一点,降低影响。
2、冰箱不宜对电磁炉或微波炉:会带来争执与破财。有这种状况,要把电磁炉和微波炉另外放。
3、冰箱不宜正对大门:容易犯小人是非,与人相处容易产生误解与对立。有这种状况请移动冰箱开啓位置,或者安放门帘。
4、冰箱不宜正对厕所:容易发生家中人疾病与开刀丶血光事宜。有这种状况请移动冰箱开啓位置,或者安放门帘。
5、冰箱不宜正对房间门:容易使居住房间之人不好相处与经常争吵。有这种状况请移动冰箱开啓位置,或者安放门帘。
6、冰箱不宜正对神桌:会影响学业/工作发展与事业发展。有这种状况请移动冰箱开啓位置。
7、冰箱不宜正对水族箱:会时常遭致莫名破财厄运。有这种状况请移动冰箱开啓位置,或者移动水族箱。
8、冰箱不宜放置在房间:会导致房间的人个性极端丶思考偏激丶工作财运皆不顺利。
9、冰箱不宜安置於客厅:会让全家人感情冷淡、互动不佳、财运不顺。
冰箱五行属金丶属水,如果有以上冲煞的情况,也可以在冰箱旁安放大型观赏盆栽,吸纳过剩的水气。或者随身佩带黑曜石,改善身体状况与小人作祟。

冰箱的风水禁忌
1、冰箱不能为空
冰箱与家人的饮食息息相关,冰箱中的食物充足有衣食无忧的寓意;而空空的冰箱则有经济状况不佳的不良诱导。所以一定要经常保持冰箱的充足状态。
2、冰箱门不宜与门相对
不管冰箱在哪里摆放,都要尽量避开冰箱门与门相对的情形。否则气流的相冲容易造成财运不稳定的情况,甚至有破财的隐忧。
3、冰箱上不宜摆放其他电器
有的朋友把微波炉、烤箱、榨汁机、豆浆机等小电器放在了冰箱上。从风水的角度来讲,各种电器发射出的电磁等气流会搅动周围的气场,对主人的健康带来不利的影响。
4、冰箱上面不要堆放杂物
冰箱和财运有关,冰箱上面堆放杂物不利于聚财。建议大家要做好清洁工作,保持冰箱顶部的清洁。
5、冰箱不宜与灶台太近
灶台属火,冰箱属金,五行相克;而且灶台工作时散发出来的是热气,冰箱敞开时则放出冷气,冷热相激。对女主人的肠胃健康有影响,还可能引发家人之间的争执。

冰箱放在什么位置好
  虽然说厨房是一个非常拥挤的地方,但是冰箱的入驻却也不怎么会影响其整体空间的规划,因为厨房中蚕蛹的都是内建式的橱柜,冰箱通常是贴着一面墙摆放,但是各种家电和橱柜将厨房的每面墙都占据后,厨房也就只剩下一点点空间了,在风水上这是拥挤而不吉的典型布局,其中烤箱、火炉与冰箱及水槽,不是一个挨著一个放置,就是相互对冲。这种设计下常常会出现问题无法解决的情形,这时能做的只有把能换的换掉,并尽量保持整个空间的清洁、整齐、明亮,空气也要流通。
而通常情况下,为了使用上的便利,我们都会将冰箱摆放在厨房中。厨房是火旺之地,以厨房之火克冰箱之金,在不知不觉中就消耗了厨房的火性,对厨房的火性有所减弱,有利于厨房的五行平衡。但是需要注意的是冰箱不能太靠近炉灶或正对,因炉灶油烟太多,这样容易使冰箱被污染,直接影响主人的健康。但冰箱放在厨房内,可以减低厨房的火性,降低发生火灾的可能,因此冰箱在厨房内尽量离炉灶远一点就行了。
有些人认为冰箱可放在家中的凶位,用冰箱的冰冷沉重来镇压凶星;有些人则认为冰箱不能摆在凶位,说冰箱二十四小时不停运行,如果放在凶位,会惊动凶星,刺激它肆虐逞威,与风水中“凶方宜静不宜动”相矛盾。而家居中所谓的吉凶方位并不是那么绝对,而是相对的。所以,也不能绝对地说哪里是凶位,绝对不适合冰箱的摆放,而应该结合家中的具体情形,家人的命理喜忌,这才能找到家中最适合冰箱摆放的位置。
在决定冰箱摆放位置时,还有一件事必须考虑到:理想的状况下,不应该让冰箱对著厨房的门。风水大师认为,这种摆置会让来自门口及电冰箱的两股能量相衝突,导致家庭失和以及财务发生问题。

 

from:http://www.azg168.cn/jiajufengshui/2014-03-22/home69020.html

PowerDesigner更改数据库类型

工具:powerdesigner

数据库:sql server2000 --> mysql 5.0

1、更改数据库

14207159_1

将DBMS里的数据库(原为sqlserver2000)改为mysql5.0

2、生成mysql脚本

Database --> Generate Database

在directory里选择生成的sql脚本存放的路径;

在file name里修改sql脚本的名字;

one file only 勾选后,只生成一个sql脚本;不勾选,按照表的个数生成多个脚本;

由于建模时是按sqlserver标准设计的,转成mysql会有错误,取消掉check model前面的勾可避免生成sql脚本时发生如下的错误:

Generation aborted due to errors detected during the verification of the model.

其他错误见结尾

为了避免错误,在此将create primary key改为inside

format选项卡里主要修改文本格式,如果有中文,改成UTF-8,避免生成的脚本有乱码;

在这个选项卡里选择workspace,点击旁边的include sub_objects,在下面的列表里会显示该工程下的所有表。点击select all,列表中的所有表前面会出现勾(也可以只选择几个表)。

点击确定,完成脚本生成。
———————————————————--

常见问题

自增问题: 解决方法如下:

在你所要设为自增型的键上(比如你的 id )双击,弹出一个 Column Properties 对话框,右下角有一个 Identify 的选择框,选中它 OK ,就可以了。

再去查看 Preview ,就能看到用大写标识出来的 AUTO_INCREMENT 。

右键表属性在physical options中可设置表类型MYISAM

设置字段默认值 :双击表,出现 column 列表,双击要设置的列的左边的灰色框,应该会弹出新的窗口,然后在新窗口上选择 standard   checks   ,里面有 default 的默认值

SQL Server2008附加数据库失败 错误号:5120

附加数据库时,显示错误,错误信息为

一种解决方法为,设置mdf文件所在文件夹的权限(有些资料说只设置mdf文件的权限就好,但我试了不管用),在文件夹上右击——属性——安全,如图所示:

选择组或用户名中的Authenticated Users,点击编辑修改权限,选中允许完全控制,确定即可。

另一种解决方法,查了资料说不要用sa账户登录,用windows身份验证登录就可以附加成功,但是我的正好相反,用windows身份验证登录不能成功,用sa账户登录就可以附加成功。(真是无比神奇呀~~如果有大牛知道为啥麻烦告知一下,不胜感激呀)

from:http://blog.163.com/zhang_ying112/blog/static/19826008020128308257856/

Membership的配置文件

童安格

童安格1959年7月26日生于台湾高雄的著名歌手、音乐人,原籍浙江杭州,是华语乐坛较早的实力派歌手。集作曲、作词、演唱于一身,是典型的浪漫主义爱情故事的发言人。与王杰周华健齐秦并称台湾四大天王(1985—1999年)

人物经历

1959年7月,出生于台北。1964年入松江幼稚园,参加“松江天使合唱团”。[1]
1965年,就读台北市长春国民小学,参加该校合唱团。[1]
1966年,有一天和同学玩耍的时候,左手食指不小心被门夹断,担心指头会少一截, 哭个不停。[1]
1967年,因为手受伤可以不用写字,减少了许多功课上的负担,每天都过得很快乐。但也造就成以后国文程度的低落。[1]
1968年,代表学校参加高雄国小独唱组比赛,得第二名。
1969年,受洗为基督徒。
1970年,入介寿国中。参加学校乐队及童子军。
1971年,因成绩不佳,留级重读一年。
1972年,参加学校举行的“行的安全”漫画比赛,得第三名。
1973年,参加救国团活动表现优良,得“团结互助奖”。
1974年顺利毕业。
1975年,考上复兴商工美工科,画得一手好素描。担任军乐队指挥,并参加歌咏社,当教唱员。
1976年,是学校的锋头人物,初恋开始。
1977年,组成“旅行者三重唱”。此时正值毕业及当兵前夕,开始在外做小型演唱,迷糊中毕业了。
1978年,与银霞合录“兰花草”唱片与电视专辑。灌录《旅行者》三重唱专辑。
1979年,徽召入伍,旅行者也渐渐销声匿迹。
1980年,到金门服役,开始人生的一段磨练,军职是“师令部号兵” 并教军官唱军歌。
1981年,从军中退伍,心情并不愉快,因为将面临另一个新生活考验,唯一乐观的是两年军中生活写了三十几首创作歌曲。
1982年,遇到了很多困难的事,找不到工作,朋友也各奔西东。最后找到一家卡通公司,从事卡通的工作。同年发表了《此情永不留》及《夜色》两首歌曲。
1983年,幸运作出几首受欢迎的歌曲,引导创作的另一个开始。同时在“宝丽金”唱片公司担任助理制作。
1984年,开始策划自己的专辑唱片。
1985年,出版首张个人专辑《想你》。
1985年,出版第二张个人专辑《女人》,第一次接触戏剧,参加中视单元剧《风筝》担任男主角。
1986年,出版第三张个人专辑《我曾经爱过》跃上大银幕,参加导演陈坤厚所导的电影《流浪少年路》,和刘瑞琪分饰男女主角,童安格并担任电影配乐制作。[3]
1987年,出版第四张个人专辑《跟我来》[4] 。同年度得到台湾票选最受欢迎男歌星奖,并为由朱延平导演的电影《好小子》担任配乐制作工作。
1988年,演出第一部连续剧《新不了情》由李岳峰导演,担任男主角。
1989年,出版第五张个人专辑《其实你不懂我的心》这张专辑在不到一年的时间红遍了全台湾,成为本年度全台湾男歌手唱片销售量冠军,更深得内地人民的喜爱,此时为童安格全盛时期。
1989年,出版第六张个人专辑《梦开始的地方》以本专辑得到IFPI的白金唱片奖。
1990年,出版第七张个人专辑《花瓣雨》开始将自己推向国际化音乐创作者的地位,同时因与梅艳芳合唱《明天你是否依然爱我》而打入香港市场,占有一席之地后,香港许多艺人纷纷邀歌,或是翻唱童安格专辑中的歌曲,他还担任谭咏麟演唱会上的特别嘉宾。
1990年,以《忘不了》精选集得到IFPI的白金唱片奖。同年推出第八张个人专辑《真爱是谁》。
1990年,以《耶利亚女郎》得到香港无线电台(TVB)十大劲歌金曲“国语歌曲银奖”。
1990年,在香港电台第十三届十大中文金曲,以《夕阳醉了》得到“最佳作曲奖”,以《把根留住》得到“优秀国语歌曲奖”。
1991年,出版第九张个人专辑《一世情缘》。
1991年,第一次在内地举办十场个人巡回演唱会,造成轰动一票难求,同年得到内地广东首届金唱片的“最受欢迎男歌星奖”及内地“最受欢迎流行音乐生力奖”。
1992年,入围台湾第三届金曲奖“最佳国语男演唱人奖”。
1993年,出版第十张个人专辑《爱与哀愁》同年得到内地中国唱片公司的“金唱片奖”,这是除了内地歌手外,第一位台湾歌手得奖。同时以第一到第三张专辑获得内地中国唱片公司的“演唱金唱片奖”。
1993年,以《把根留住》一曲,再度吸引成千上万的同胞喜爱,并得到“中国十大受欢迎歌手奖”。同年第二次在内地举办十场个人巡回演唱会,更是欲罢不能。
1993年,参加由李岳峰导演的连续剧《秦俑》,担任男主角及配乐工作。
1994年,受邀到美国拉斯维加斯MGM饭店,举行个人演唱会。演出场地是MGM GRAND开幕时芭芭拉.史翠珊演出的地点,童安格是台湾第一位在此场地演出的歌手,深感荣幸。
1994年,出版第十一张个人专辑《现在以后》蝉联得到“中国十大最受欢迎歌手奖”。
1994年,七月在台北国父纪念馆及台中举办三场个人演唱会。
1994年,担任第三十一届金马奖“最佳电影歌曲”颁奖人。
1995年,出版第十二张个人专辑《听海的歌》同年七月加盟点将唱片公司。
1995年,出版个人第十三张专辑《看未来有什么不一样》,专辑中收录一首上海电视台连续剧《上海一家人》插曲《永远不再》。
1996年,出版个人第十四张专辑《收留》。拍摄韩国健康饮料广告。移民加拿大。
1997年,参与美加地区之演唱会。组织太阳星系棒球队赴加拿大进行跨国友谊赛。拍摄电视连续剧“战国红颜”。
1998年,于美国拉斯维加斯及大西洋城举行个人演唱会。加拿大温哥华中文电台主持“童话安格”广播节目。
1999年,参与中国各地演唱会演出。拍摄电视连续剧《西螺七崁》。
2000年,参与中国各地演唱会演出。拍摄电视连续剧《卧虎藏龙》。
2001年,开始整理早年创作,为新专辑做准备。为中国品牌商品担任代言。
2002年,完成新专辑之音乐创作。赴意大利宣慰侨胞。
2003年,拍摄电视连续剧《梦里花开》,并负责剧中主题曲之词曲制作及演唱。出版第十五张个人专辑《青春手卷》。
2006年6月26日晚,“成龙好朋友慈善演唱会”在哈尔滨举行,童安格助阵,为哈尔滨人民献上一场精彩的表演,所得收入将全部捐献给哈尔滨慈善机构。
2006年12月1日到2日童安格在北京展览馆剧场举办个唱会,在全力备战演唱会的同时,他还不忘热心公益事业,成为11月北京交通安全月的形象大使。
2008年12月31日,童安格“把歌留住”个人演唱会火爆开场,一首首经典老歌不仅在寒冷的冬夜给人以无限的温暖,而且给整个津门献上了一份隆重的新春贺礼。

个人生活

在童安格个人简介中写着他的最大心愿:做好的音乐、做好的歌手、做好的老公。可是前两点都实现了,但他的婚姻却失败了。2004年,童安格与妻子陈美馨正式离婚,而两人在此之前感情就亮起红灯,已经分居一年。
其实,在歌坛有“情歌王子”和“绝种好男人”双重美誉的童安格鲜有情感方面的新闻,但其18年婚姻失败却着实令歌迷大感意外。而童安格曾透露了自己心境:“说心里话,我现在真的感到很不开心,有一种失落的感觉。毕竟18年的感情和生活,我们中国人有一句名言‘一日夫妻百日恩’,何况我们之间在一起那么久了,从一个家庭生活的状态回到相当久以前的单身状态,的确很难接受,在短时间内蛮难适应的……”
前妻陈美馨曾长期为童安格担任演艺事业的经理人,两人在工作中的思路常常无法达成一致也是导致他们在生活中矛盾加深的根源之一。两个人在工作的想法上难免会有分歧,如果他们不是夫妻关系,可能问题会更好解决。
虽然两人已分手,但童安格还是非常感激前妻:“事实证明有她给我打理事业,使我有更多的精力放在业务上。我要发自内心地谢谢她,带给我许多欢乐和幸福的时光,在我烦恼不顺心的时候默默地安慰陪伴我,这些我都是忘不了的,结局虽然是令人失望的,但美好的过程终究应当成为永远难忘的记忆中的片段。”

Lucene的IndexWriter初始化时报Lock obtain timed out: NativeFSLock

有一次更新完代码启动系统,系统报如下异常:

 

经查,IndexWriter的构造函数在试图获取另外一个IndexWriter已经加锁的索引目录时就会抛出一个LockObtainFailedException。但是我们系统中并没有多个IndexWriter去指定同一个目录,走查代码才发现,原来是同一个初始化方法调用了两次,一次是spring监听器里调用的,另一个是另一同事测试方便,在static模块里调用的,导致同一个lucene上下文初始化方法被调用两次,建议static模块要慎用,因为它会悄悄神不知鬼不知自己悄悄被调用。

from:http://www.tuicool.com/articles/2UBVnq7

影响Lucene索引速度原因以及提高索引速度技巧

在网上看了一篇外文文章,里面介绍了提高Lucene索引速度的技巧,分享给大家。
先来看下影响索引的主要因素:

MaxMergeDocs
该参数决定写入内存索引文档个数,到达该数目后就把该内存索引写入硬盘,生成一个新的索引segment文件。
所以该参数也就是一个内存buffer,一般来说越大索引速度越快。
MaxBufferedDocs这个参数默认是disabled的,因为Lucene中还用另外一个参数(RAMBufferSizeMB)控制这个bufffer的索引文档个数。
其实MaxBufferedDocs和RAMBufferSizeMB这两个参数是可以一起使用的,一起使用时只要有一个触发条件满足就写入硬盘,生成一个新的索引segment文件。

RAMBufferSizeMB
控制用于buffer索引文档的内存上限,如果buffer的索引文档个数到达该上限就写入硬盘。当然,一般来说也只越大索引速度越快。
当我们对文档大小不太确定时,这个参数就相当有用,不至于outofmemory error.

MergeFactor
这个参数是用于子索引(Segment)合并的。
Lucene中索引总体上是这样进行,索引现写到内存,触发一定限制条件后写入硬盘,生成一个独立的子索引-lucene中叫Segment。一般来说这些子索引需要合并成一个索引,也就是optimize(),否则会影响检索速度,而且也可能导致open too many files。
MergeFactor 这个参数就是控制当硬盘中有多少个子索引segments,我们就需要现把这些索引合并冲一个稍微大些的索引了。
MergeFactor这个不能设置太大,特别是当MaxBufferedDocs比较小时(segment 越多),否则会导致open too many files错误,甚至导致虚拟机外面出错。

Note: Lucene 中默认索引合并机制并不是两两合并,好像是多个segment 合并成最终的一个大索引,所以MergeFactor越大耗费内存越多,索引速度也会快些,但我的感觉太大譬如300,最后合并的时候还是很满。Batch indexing 应 MergeFactor>10

加快索引的一些技巧:

• 确认你在使用最新的Lucene版本。

• 尽量使用本地文件系统

远程文件系统一般来说都会降低索引速度。如果索引必须分布在远程服务器,请尝试先在本地生成索引,然后分发到远程服务器上。
• 使用更快的硬件设备,特别是更快的IO设备

• 在索引期间复用单一的IndexWriter实例

• 使用按照内存消耗Flush代替根据文档数量Flush
在Lucene 2.2之前的版本,可以在每次添加文档后调用ramSizeInBytes方法,当索引消耗过多的内存时,然后在调用flush()方法。这样做在索引大量小文档或者文档大小不定的情况下尤为有效。你必须先把maxBufferedDocs参数设置足够大,以防止writer基于文档数量flush。但是注意,别把这个值设置的太大,否则你将遭遇Lucene-845号BUG。不过这个BUG已经在2.3版本中得到解决。

在Lucene2.3之后的版本。IndexWriter可以自动的根据内存消耗调用flush()。你可以通过writer.setRAMBufferSizeMB()来设置缓存大小。当你打算按照内存大小flush后,确保没有在别的地方设置MaxBufferedDocs值。否则flush条件将变的不确定(谁先符合条件就按照谁)。

• 在你能承受的范围内使用更多的内存
在flush前使用更多的内存意味着Lucene将在索引时生成更大的segment,也意味着合并次数也随之减少。在Lucene-843中测试,大概48MB内存可能是一个比较合适的值。但是,你的程序可能会是另外一个值。这跟不同的机器也有一定的关系,请自己多加测试,选择一个权衡值。

• 关闭复合文件格式
调用setUseCompoundFile(false)可以关闭复合文件选项。生成复合文件将消耗更多的时间(经过Lucene-888测试,大概会增加7%-33%的时间)。但是请注意,这样做将大大的增加搜索和索引使用的文件句柄的数量。如果合并因子也很大的话,你可能会出现用光文件句柄的情况。

• 重用Document和Field实例
在lucene 2.3中,新增了一个叫setValue的方法,可以允许你改变字段的值。这样的好处是你可以在整个索引进程中复用一个Filed实例。这将极大的减少GC负担。

最好创建一个单一的Document实例,然后添加你想要的字段到文档中。同时复用添加到文档的Field实例,通用调用相应的SetValue方法改变相应的字段的值。然后重新将Document添加到索引中。

注意:你不能在一个文档中多个字段共用一个Field实例,在文档添加到索引之前,Field的值都不应该改变。也就是说如果你有3个字段,你必须创建3个Field实例,然后再之后的Document添加过程中复用它们。

• 在你的分析器Analyzer中使用一个单一的Token实例
在分析器中共享一个单一的token实例也将缓解GC的压力。

• 在Token中使用char[]接口来代替String接口来表示数据
在Lucene 2.3中,Token可以使用char数组来表示他的数据。这样可以避免构建字符串以及GC回收字符串的消耗。通过配合使用单一Token实例和使用char[]接口你可以避免创建新的对象。

• 设置autoCommit为false
在Lucene 2.3中对拥有存储字段和Term向量的文档进行了大量的优化,以节省大索引合并的时间。你可以将单一复用的IndexWriter实例的autoCommit设置为false来见证这些优化带来的好处。注意这样做将导致searcher在IndexWriter关闭之前不会看到任何索引的更新。如果你认为这个对你很重要,你可以继续将autoCommit设置为true,或者周期性的打开和关闭你的writer。

• 如果你要索引很多小文本字段,如果没有特别需求,建议你将这些小文本字段合并为一个大的contents字段,然后只索引contents。(当然你也可以继续存储那些字段)

• 加大mergeFactor合并因子,但不是越大越好
大的合并因子将延迟segment的合并时间,这样做可以提高索引速度,因为合并是索引很耗时的一个部分。但是,这样做将降低你的搜索速度。同时,你有可能会用光你的文件句柄如果你把合并因子设置的太大。值太大了设置可能降低索引速度,因为这意味着将同时合并更多的segment,将大大的增加硬盘的负担。

• 关闭所有你实际上没有使用的功能
如果你存储了字段,但是在查询时根本没有用到它们,那么别存储它们。同样Term向量也是如此。如果你索引很多的字段,关闭这些字段的不必要的特性将对索引速度提升产生很大的帮助。

• 使用一个更快的分析器
有时间分析文档将消耗很长的时间。举例来说,StandardAnalyzer就比较耗时,尤其在Lucene 2.3版本之前。你可以尝试使用一个更简单更快但是符合你需求的分析器。

• 加速文档的构建时间
在通常的情况下,文档的数据来源可能是外部(比如数据库,文件系统,蜘蛛从网站上的抓取等),这些通常都比较耗时,尽量优化获取它们的性能。

• 在你真的需要之前不要随意的优化optimize索引(只有在需要更快的搜索速度的时候)

• 在多线程中共享一个IndexWriter
最新的硬件都是适合高并发的(多核CPU,多通道内存构架等),所以使用多线程添加文档将会带来不小的性能提升。就算是一台很老的机器,并发添加文档都将更好的利用IO和CPU。多测试并发的线程数目,获得一个临界最优值。

• 将文档分组在不同的机器上索引然后再合并
如果你有大量的文本文档需要索引,你可以把你的文档分为若干组,在若干台机器上分别索引不同的组,然后利用writer.addIndexesNoOptimize来将它们合并到最终的一个索引文件中。

• 运行性能测试程序
如果以上的建议都没有发生效果。建议你运行下性能检测程序。找出你的程序中哪个部分比较耗时。这通常会给你想不到的惊喜。
本翻译属于原创,转载时请注明出处,英文原版请查看:

http://wiki.apache.org/jakarta-lucene/ImproveIndexingSpeed

from:http://www.cnblogs.com/gaoweipeng/archive/2009/10/16/1584503.html

mysql in 子查询 效率慢 优化(转)

现在的CMS系统、博客系统、BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下。但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久!百思不解(后来终于解决),我的表结构是下面这样的,文章只有690篇。

文章表article(id,title,content)
标签表tag(tid,tag_name)
标签文章中间表article_tag(id,tag_id,article_id)
其中有个标签的tid是135,我帮查询标签tid是135的文章列表
用以下语句时发现速度好慢,我文章才690篇
select id,title from article where id in(
select article_id from article_tag where tag_id=135
)
其中这条速度很快:select article_id from article_tag where tag_id=135
查询结果是五篇文章,id为428,429,430,431,432
我用写死的方式用下面sql来查文章也很快
select id,title from article where id in(
428,429,430,431,432
)
我在SqlServer中好像不会这样慢,不知MySQL怎样写好点,也想不出慢在哪里。

后来我找到了解决方法:

select id,title from article where id in(
select article_id from (select article_id from article_tag where tag_id=135) as tbt
)

 

 

其它解决方法:(举例)

mysql> select * from abc_number_prop where number_id in (select number_id from abc_number_phone where phone = '82306839');

为了节省篇幅,省略了输出内容,下同。

67 rows in set (12.00 sec)

只有67行数据返回,却花了12秒,而系统中可能同时会有很多这样的查询,系统肯定扛不住。用desc看一下(注:explain也可)

mysql> desc select * from abc_number_prop where number_id in (select number_id from abc_number_phone where phone = '82306839');
+—-+——————--+——————+——--+—————--+——-+———+————+———+————————--+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+——————--+——————+——--+—————--+——-+———+————+———+————————--+
| 1 | PRIMARY | abc_number_prop | ALL | NULL | NULL | NULL | NULL | 2679838 | Using where |
| 2 | DEPENDENT SUBQUERY | abc_number_phone | eq_ref | phone,number_id | phone | 70 | const,func | 1 | Using where; Using index |
+—-+——————--+——————+——--+—————--+——-+———+————+———+————————--+
2 rows in set (0.00 sec)

从上面的信息可以看出,在执行此查询时会扫描两百多万行,难道是没有创建索引吗,看一下

mysql>show index from abc_number_phone;
+——————+————+————-+————--+—————--+———--+————-+———-+——--+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+——————+————+————-+————--+—————--+———--+————-+———-+——--+——+————+———+—————+
| abc_number_phone | 0 | PRIMARY | 1 | number_phone_id | A | 36879 | NULL | NULL | | BTREE | | |
| abc_number_phone | 0 | phone | 1 | phone | A | 36879 | NULL | NULL | | BTREE | | |
| abc_number_phone | 0 | phone | 2 | number_id | A | 36879 | NULL | NULL | | BTREE | | |
| abc_number_phone | 1 | number_id | 1 | number_id | A | 36879 | NULL | NULL | | BTREE | | |
| abc_number_phone | 1 | created_by | 1 | created_by | A | 36879 | NULL | NULL | | BTREE | | |
| abc_number_phone | 1 | modified_by | 1 | modified_by | A | 36879 | NULL | NULL | YES | BTREE | | |
+——————+————+————-+————--+—————--+———--+————-+———-+——--+——+————+———+—————+
6 rows in set (0.06 sec)

mysql>show index from abc_number_prop;
+—————--+————+————-+————--+—————-+———--+————-+———-+——--+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+—————--+————+————-+————--+—————-+———--+————-+———-+——--+——+————+———+—————+
| abc_number_prop | 0 | PRIMARY | 1 | number_prop_id | A | 311268 | NULL | NULL | | BTREE | | |
| abc_number_prop | 1 | number_id | 1 | number_id | A | 311268 | NULL | NULL | | BTREE | | |
| abc_number_prop | 1 | created_by | 1 | created_by | A | 311268 | NULL | NULL | | BTREE | | |
| abc_number_prop | 1 | modified_by | 1 | modified_by | A | 311268 | NULL | NULL | YES | BTREE | | |
+—————--+————+————-+————--+—————-+———--+————-+———-+——--+——+————+———+—————+
4 rows in set (0.15 sec)

从上面的输出可以看出,这两张表在number_id字段上创建了索引的。

看看子查询本身有没有问题。

mysql> desc select number_id from abc_number_phone where phone = '82306839';
+—-+————-+——————+——+—————+——-+———+——-+——+————————--+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——————+——+—————+——-+———+——-+——+————————--+
| 1 | SIMPLE | abc_number_phone | ref | phone | phone | 66 | const | 6 | Using where; Using index |
+—-+————-+——————+——+—————+——-+———+——-+——+————————--+
1 row in set (0.00 sec)

没有问题,只需要扫描几行数据,索引起作用了。查询出来看看

mysql> select number_id from abc_number_phone where phone = '82306839';
+———--+
| number_id |
+———--+
| 8585 |
| 10720 |
| 148644 |
| 151307 |
| 170691 |
| 221897 |
+———--+
6 rows in set (0.00 sec)

直接把子查询得到的数据放到上面的查询中

mysql> select * from abc_number_prop where number_id in (8585, 10720, 148644, 151307, 170691, 221897);

67 rows in set (0.03 sec)

速度也快,看来MySQL在处理子查询的时候是不够好。我在MySQL 5.1.42 和 MySQL 5.5.19 都进行了尝试,都有这个问题。

搜索了一下网络,发现很多人都遇到过这个问题:

参考资料1:使用连接(JOIN)来代替子查询(Sub-Queries) mysql优化系列记录
http://blog.csdn.net/hongsejiaozhu/article/details/1876181
参考资料2:网站开发日记(14)-MYSQL子查询和嵌套查询优化
http://dodomail.iteye.com/blog/250199

根据网上这些资料的建议,改用join来试试。

修改前:select * from abc_number_prop where number_id in (select number_id from abc_number_phone where phone = '82306839');

修改后:select a.* from abc_number_prop a inner join abc_number_phone b on a.number_id = b.number_id where phone = '82306839';

mysql> select a.* from abc_number_prop a inner join abc_number_phone b on a.number_id = b.number_id where phone = '82306839';

67 rows in set (0.00 sec)

效果不错,查询所用时间几乎为0。看一下MySQL是怎么执行这个查询的

mysql>desc select a.* from abc_number_prop a inner join abc_number_phone b on a.number_id = b.number_id where phone = '82306839';
+—-+————-+——-+——+—————--+———--+———+—————--+——+————————--+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——-+——+—————--+———--+———+—————--+——+————————--+
| 1 | SIMPLE | b | ref | phone,number_id | phone | 66 | const | 6 | Using where; Using index |
| 1 | SIMPLE | a | ref | number_id | number_id | 4 | eap.b.number_id | 3 | |
+—-+————-+——-+——+—————--+———--+———+—————--+——+————————--+
2 rows in set (0.00 sec)

小结:当子查询速度慢时,可用JOIN来改写一下该查询来进行优化。

网上也有文章说,使用JOIN语句的查询不一定总比使用子查询的语句快。

参考资料3:改变了对Mysql子查询的看法
http://hi.baidu.com/yzx110/blog/item/e694f536f92075360b55a92b.html

 

 

mysql手册也提到过,具体的原文在mysql文档的这个章节:

I.3. Restrictions on Subqueries

13.2.8. Subquery Syntax

摘抄:

1)关于使用IN的子查询:

Subquery optimization for IN is not as effective as for the = operator or for IN(value_list) constructs.

A typical case for poor IN subquery performance is when the subquery returns a small number of rows but the outer query returns a large number of rows to be compared to the subquery result.

The problem is that, for a statement that uses an IN subquery, the optimizer rewrites it as a correlated subquery. Consider the following statement that uses an uncorrelated subquery:

The optimizer rewrites the statement to a correlated subquery:

If the inner and outer queries return M and N rows, respectively, the execution time becomes on the order of O(M×N), rather than O(M+N) as it would be for an uncorrelated subquery.

An implication is that an IN subquery can be much slower than a query written using an IN(value_list) construct that lists the same values that the subquery would return.

2)关于把子查询转换成join的:

The optimizer is more mature for joins than for subqueries, so in many cases a statement that uses a subquery can be executed more efficiently if you rewrite it as a join.

An exception occurs for the case where an IN subquery can be rewritten as a SELECT DISTINCT join. Example:

That statement can be rewritten as follows:

But in this case, the join requires an extra DISTINCT operation and is not more efficient than the subquery

from:http://www.cnblogs.com/xh831213/archive/2012/05/09/2491272.html

1 286 287 288 413