(译者注:作者借这个题目反讽另一篇同名的文章)  Jaslabs 的 Justin Silverton 列出了,我不得不对此发表言论,因为这个清单非常非常糟糕。另外一个 也同样意识到了。所以在这个博客中,我要做两件事情,第一,指出为什么这个清单很糟糕,第二,列出我的清单,希望我的比较好些。继续看吧,无畏的读者们!      我们要遵循的一个准则就是如果你要优化代码时,应该先找出瓶颈在哪。然而 Silverton 先生的力气没有用对地方。我认为 60% 的优化是基于清楚理解 SQL 和数据库基础的。你需要知道 join 和子查询的区别,列索引,以及如何将数据规范化等等。另外的 35% 的优化是需要清楚数据库选择时的性能表现,例如 COUNT (*)可能很快也可能很慢,要看你选用什么数据库引擎。还有一些其他要考虑的因素,例如数据库在什么时候不用缓存,什么时候存在硬盘上而不存在内存中,什么时候数据库创建临时表等等。剩下的5% 就很少会有人碰到了,但 Silverton 先生恰好在这上面花了大量的时间。我从来就没用过 SQL_SAMLL_RESULT。    Silverton 先生提出了一些很好的问题。MySQL 针对长度可变的列如 TEXT 或 BLOB,将会使用动态行格式(dynamic row format),这意味着排序将在硬盘上进行。我们的方法不是要回避这些数据类型,而是将这些数据类型从原来的表中分离开,放入另外一个表中。下面的 schema 可以说明这个想法:    他的许多建议都是让人非常吃惊的,譬如“移除不必要的括号”。你这样写 SELECT * FROM posts WHERE (author_id = 5 AND published = 1),还是这样写 SELECT * FROM posts WHERE author_id = 5 AND published = 1 ,都不重要。任何比较好的 DBMS 都会自动进行识别做出处理。这种细节就好像C语言中是i++快些还是++i快些。真的,如果你把精力都花在这上面了,那就不用写代码了。    看看我的列表是不是更好吧。我先从最普遍的开始。    如果需要做决定的话,我们需要数据说话。什么样的查询是最糟的?瓶颈在哪?我什么情况下会写出糟糕的查询?基准测试可以让你模拟高压情况,然后借助性能测评工具,可以让你发现数据库配置中的错误。这样的工具有 supersmack, ab, SysBench。这些工具可以直接测试你的数据库(譬如 supersmack),或者模拟网络流量(譬如 ab)。    那么,当你能够建立一些高压情况之后,你需要找出配置中的错误。这就是性能测评工具可以帮你做的了。它可以帮你发现配置中的瓶颈,不论是在内存中,CPU 中,网络中,硬盘I/O,或者是以上皆有。  你要做的第一件事就是开启慢查询日志(slow query log),装上 mtop。这样你就能获取那些恶意的入侵者的信息了。有需要运行 10 秒的查询语句正在破坏你的应用程序吗?这些家伙会展示给你看他的查询语句是怎么写的。  在你发现那些很慢的查询语句后,你需要用 MySQL 自带的工具,如 EXPLAIN,SHOW STATUS,SHOW PROCESSLIST。它们会告诉你资源都消耗在哪了,查询语句的缺陷在哪,譬如一个有三次 join 子查询的查询语句是否在内存中进行排序,还是在硬盘上进行。当然你也应该使用测评工具如 top,procinfo,vmstat 等等获取更多系统性能信息。    在你开始写查询语句之前,你需要设计 schema。记住将一个表装入内存所需要的空间大概是行数*一行的大小。除非你觉得世界上的每个人都会在你的网站注册 2 兆 8000 亿次的话,否则你不需要采用 BITINT 作为你的 user_id。同样的,如果一个文本列是固定大小的话(譬如 US 邮编,通常是”XXXXX-XXXX”的形式),采用 VARCHAR 的话会给每行增加多余的字节。  有些人对数据库规范化不以为意,他们说这样会形成相当复杂的 schema。然而适当的规范化会减少化冗余数据。(适当的规范化)就意味着牺牲少许性能,换取整体上更少的 footprint,这种性能换取内存在计算机科学中是很常见的。最好的方法是 IMO,就是开始先规范化,之后如果性能需要的话,再反规范化。你的数据库将会更逻辑化,你也不用过早的进行优化。(译者注,这一段我不是很理解,可能翻译错了,欢迎纠正。)    通常有些表只有一些列你是经常需要更新的。例如对于一个博客,你需要在许多不同地方显示标题(如最近的文章列表),只在某个特定页显示概要或者全文。水平垂直拆分是很有帮助的:  上面的 schema 是对读数据进行的优化。经常要访问的数据存在一个表中,那些不经常访问的数据放在另一个。被拆分后,不经常访问的数据占据更少的内存。你也可以优化写数据,经常更新的数据放在一个表,不经常更新的放在另一个表。这可以使缓存更高效,因为 MySQL 不需要让没有更新过的数据移出缓存。    artificial primary key 非常棒,因为他们使得 schema 更少的变化。如果我们将地理信息存在以美国邮编为基础的表中,如果邮编系统突然改变了,那我们就会有大麻烦了。另一方面,采用 natural key 有时候也很棒,譬如我们需要 join 多对多的关系表时,我们不应该这样:  artificial key 完全是多余的,而且 post-tag 关系的数量将会受到整形数据的系统最大值的限制。    你选择的索引的好坏很重要,不好的话可能破坏数据库。对那些还没有在数据库学习很深入的人来说,索引可以看作是就是 hash 排序。例如如果我们用查询语句 SELECT * FROM users WHERE last_name = ‘Goldstein’,而 last_name 没有索引的话,那么 DBMS 将会查询每一行,看看是否等于“Goldstein”。索引通常是B-tree(还有其他的类型),可以加快比较的速度。  你需要给你要 select,group,order,join 的列加上索引。显然每个索引所需的空间正比于表的行数,所以越多的索引将会占用更多的内存。而且写数据时,索引也会有影响,因为每次写数据时都会更新对应的索引。你需要取一个平衡点,取决每个系统和实施代码的需要。    C 是经典的过程语言,对于一个来说,C语言也是个陷阱,使你错误的以为 SQL 也是一种过程语言(当然 SQL 也不是功能语言也不是面向对象的)。你不要想象对数据进行操作,而是要想象有一组数据,以及它们之间的关系。经常使用子查询时会出现错误的用法。  因为这个子查询是耦合的,子查询要使用外部查询的信息,我们应该使用 join 来代替。    MySQL 有两种存储引擎:MyISAM 和 InnoDB。它们分别有自己的性能特点和考虑因素。总体来讲,MyISAM 适合读数据很多的情况,InnoDB 适合写数据很多的情况,但也有很多情况下正好相反。最大的区别是它们如何处理 COUNT 函数。  MyISAM 缓存有表 meta-data,如行数。这就意味着,COUNT (*)对于一个结构很好的查询是不需要消耗多少资源的。然后对于 InnoDB 来说,就没有这种缓存。举个例子,我们要对一个查询来分页,假设你有这样一个语句 SELECT * FROM users LIMIT 5,10,而运行 SELECT COUNT (*) FROM users LIMIT 5,10 时,对于 MyISAM 很快完成,而对 InnoDB 就需要和第一个语句相同的时间。MySQL 有个 SQL_CALC_FOUND_ROWS 选项,可以告诉 InnoDB 运行查询语句时就计算行数,之后再从 SELECT FOUND_ROWS ()来获取。这是 MySQL 特有的。但使用 InnoDB 有时候是非常必要的,你可以获得一些功能(如行锁定,stord procedure 等)。    MySQL 提供了许多扩展,方便使用。譬如 INSERT … SELECT, INSERT … ON DUPLICATE KEY UPDATE, 以及 REPLACE。  我能用到它们时是毫不犹豫的,因为它们很方便,能在许多情况下发挥不错的效果。但是 MySQL 也有一些危险的关键字,应该少用。例如 INSERT DELAYED,它告诉 MySQL 不需要立即插入数据(例如在写日志的时候)。但问题是如果在很高数据量的情况下,插入可能会被无限期延迟,导致插入队列爆满。你也可以使用 MySQL 的索引提示来指出哪些索引是需要使用的。MySQL 大部分时间运行是不错的,但如果 schema 设计不好的话或语句写得不好的话,MySQL 的表现可能很糟糕。    最后,如果你关心 MySQL 性能优化的话,请阅读 Peter Zaitsev 的关于 的博客,他写了许多关于数据库管理和优化的博客。  原文链接:  编译:在线?

  自从 Windows Phone “Tango”将手机的运行内存下限降低到 256MB 之后,业内人士纷纷质疑为普通 Windows Phone 开发的应用程序是否能够在这些低配设备上正常运行。关于这一点,微软此前已经在 MSDN 专门发布过一个专题。作为 Windows Phone 生态系统的重要合作伙伴,诺基亚为开发者提供了以下 12 个要点建议,保证其出品的应用程序在 256MB 内存的 Tango 手机上也能正常运行。    这个是理所当然的,不用多说了。诺基亚建议开发者把 256MB 模拟器设为默认选项,以免忙中出错。此外不要绝对信赖模拟器,还是要在真机上调试过才保险。    Windows Phone SDK 7.1 自带了 Memory Profiler 工具,通过它能够非常直观地查看应用程序在任何一个时间点的内存使用情况。    如果开发者希望用一套代码适配高配、低配等多个平台,这条建议就比较重要。Windows Phone 7.5 系统中有一个属性是单个应用程序可支配的最大内存空间,使用 DeviceExtendedProperties.GetValue (“ApplicationWorkingSetLimit”)方法即可获取到这一数值。如果获取到的值小于 90MB(精确数字为 94371840 字节),则说明该设备为低配设备,仅有 256MB 运行内存,开发者应该对某些功能进行屏蔽,以免产生异常。    256MB 内存的低配设备不支持上述两种类,一旦调用将触发异常。:一个低配手机,运行内存一共就只有 256MB,其中操作系统本身要占用 100MB 左右,假设此时前台正在运行一个占用内存大概 60MB 的软件,后台挂了一个占用内存 60MB 的 ResourceIntensiveTasks 任务,这就已经合计 220MB,非常接近内存极限,很容易导致系统崩溃。不过,用于后台音乐播放、文件传输、闹铃等功能的 BackgroundTasks 类在 256MB 内存设备上依旧可用。    控件能够在应用程序内直接读取并显示任何网页。如果显示的网页是 PC 版,并且未针对手机进行优化,其占用的内存就可能非常大,在 256MB 内存设备上可能直接造成系统崩溃。而用 WebBrowser 就方便得多,网页将在浏览器内打开,当前运行的程序被切出(一定要记得做好墓碑机制),这样能节省不少内存。当然了,如果您为了好看,非得使用控件,最好对用户可能访问的网页做一下限制,只允许访问经过测试并且不会造成内存溢出的网页。    控件允许用户对地图进行拖曳、缩放等操作。我们知道 Bing 地图是无数块小图组成的,在用户反复拖拉缩放时,系统会不断创建新图片对象,导致内存占用飙升。实验表明,对一个控件不断操作 2 分钟后内存占用达到 50MB。这个数字在高配 Windows Phone(可用运行内存 90MB)完全不是问题,但是在低配手机(可用运行内存 60MB)就已经接近极限。BingMapsTask 产生的地图不允许用户随便操作,完全避免了内存溢出的可能性。    这个不用多说,图片越大占用的内存空间越大。反正 Windows Phone 的屏幕就是 800×480那么大,哪怕十亿像素的原图,到手机屏幕上也不过自动缩放成那么一丁点,何必逼着一个低配手机小马拉大车呢?    通俗的说,道理是这样的:我们已经知道在 Windows Phone 平台上每初始化一个图片对象就要占用一块额外内存。诺基亚在网站上提供了一段示例代码,在 Flickr 上搜索图片,并用列表的形式显示。随着用户不断滚动搜索结果列表,在 Memory Profiler 里看到的内存占用情况就成了这样:  用户一边滚动列表,程序一边从 Flickr 读取并显示新图片,系统就一边创建新的图片对象,然后内存占用就像爬楼梯一样很快到顶了。  这种时候有两种方法可以解决问题。第一种治标不治本:只显示 Flickr 的缩略图,每个图片的体积都变小了,但是滚动得久了还是要发出内存溢出。另外一种更合理的方法就是分页显示,比如说一页只显示 10 个结果。    Windows Phone 7 里面动画元素占据了很重要的地位,飞进飞出、旋转之类效果到处都有。这些动画效果可能占用大约 5MB 的运行内存。这个数字看起来很小,但是在可分配运行内存只有 60MB 的低配手机上就显得很大了。诺基亚做了一个启用和禁用过渡效果的内存占用情况对比图表:  美观和流畅孰轻孰重,请各位根据自己的项目需求自行定夺。    有些开发者(尤其是游戏开发者)每次触发声音事件时都要建立一个新的 SoundEffects,即便反复触发同一事件也照创建不误,从来不考虑重用。这种情况在高配 Windows Phone 上不是问题,因为闲置的垃圾 SoundEffect 积累太多,系统就自动进行垃圾回收清理内存了。不过在低配设备上,程序可用的运行内存只有 60MB,很可能在系统进行 GC 之前就已经造成内存溢出。声音之类的能重用就重用,不能重用记得释放吧。    另外一种节省内存的思路:既然内存那么紧张,那就把里面的数据压缩一下好了。用 DXT 等压缩算法能够对载入内存的资源组进行压缩,牺牲一部分质量,换取运行效率。    内存泄露在所有系统、所有开发平台上都会出现,主要取决于开发者本身的代码质量。多多调试、考虑到各种使用场景,把内存泄露全都掐死在摇篮里吧!

  随着云存储四大家族的形成,各家都在试图通过云端计算和同步服务来打造一套完善的生态系统。能否将人们生活中的设备顺利接入自己的云端生态系统中,这将是互联网巨头未来抢占物联网生态系统的关键因素之一。  Google Drive 的 SDK 已经和第三方应用一起发布了,最近微软也公布了 SkyDrive 的 API 接口,让开发者使用 SkyDrive 作为所有手机、网页、应用的云端存储服务器。  微软为开发者提供的 SkyDrive SDK 包括 Windows 8、WP7、iOS 和 Android 系统,可以说是非常全面的。下面具体介绍一下每个平台的 SkyDrive 的接入方法,供读者参考。    Android 应用开发者可以通过 来开发手机和平板应用,允许用户向 SkyDrive 上传文档和照片。SDK 支持 Android 2.2 到4.0系统。用户也可以通过 Android 版的 直接查看 SkyDrive 上的文件。    由于 SkyDrive 的文件夹就是一个系统文件夹,所以所有应用可以直接在本地文件夹中存储和浏览各种文件,无需在开发应用时对程序进行修改。  如果桌面应用不想依赖用户自主安装的 SkyDrive 软件就能使用 SkyDrive 服务的话,应用也可以直接将 SkyDrive 整合到软件中去。比如下面的 就是一个和 SkyDrive 深度整合的的 Outlook 邮件分享工具。    除了 iPhone 和 iPad 都有专用的 SkyDrive 软件之外,开发者还可以使用 来将 SkyDrive 云存储整合到自己的 iOS 应用中去。SDK 支持开发者使用 Xcode 4.1(Snow Leopard 系统)和 Xcode 4.2(Lion 系统)。  比如 iOS 应用 就是使用的 SDK 整合 SkyDrive,用户可以通过 iPhone 直接扫面文件并存储到 SkyDrive 上去。    用户不仅可以在 Android 或其他手机上直接下载 SkyDrive 应用,甚至一些 Android OEM 生产商已经直接将 SkyDrive 整合到了手机系统中,比如 HTC 的手机。这不仅让用户在使用中可以无缝上传分享自己的 SkyDrive 文件,甚至 SkyDrive 的容量也比其他用户的高很多。  除了手机和平板电脑之外,一些相机等移动设备也整合了微软的 SkyDrive 云端存储功能。比如三星的 WB750 卡片机就带有 WiFi 功能,用户拍摄的照片可以直接上传到 SkyDrive 中,提升内存卡的使用空间。    由于微软的大力支持,目前 Windows Phone 上的手机应用已经充分利用了 SkyDrive SDK 来为用户提供文件云端存储服务。在加上 Windows Phone 本身和 SkyDrive 的无缝整合,用户使用各种软件将更加方便,同时也会有更好的用户体验。  虽然微软在移动操作系统上并不占优势,但如果 SkyDrive 能够利用方便易用的特点和较低接入门槛吸引开发者使用该服务的话,凭借微软数以亿计的用户基数,将会很快赢得大量的用户。虽然云端存储的病毒性传播特性并不是很强,但伴随着 Windows 8 在平板电脑和笔记本上的普及,通过 SkyDrive 进行办公文件分享将会是企业和个人首选的分享方式。  而对于国内用户来说,Google Drive、Dropbox 不可用,iCloud 不普及,所有 SkyDrive 可能也是唯一一个可供选择的互联网巨头产品了。

  3月 22 日晚间消息,香港高等法院就苹果公司与 IP 公司在香港法院起诉唯冠国际控股有限公司、台湾唯冠电子股份有限公司、深圳唯冠公司等有关 IPAD 商标转让纠纷案件召开了庭前案件管理聆讯。香港法院认为现阶段案件当事人还没有做好开庭准备,因此本案还不具备正式开庭审理的条件。  法庭上,苹果公司申请排除唯冠国际的专家证人、要求立即排期开庭两项申请都没有得到支持。香港法院主审法官认为现阶段案件当事人还没有做好开庭准备,因此本案还不具备正式开庭审理的条件,具体开庭时间要安排到今年六月底再次进行案件管理聆讯决定。  国浩律师事务所合伙人谢湘辉律师在微博上表示:“从昨日香港高等法院的聆讯不难发现,苹果公司以前声明“香港法院已经支持苹果”是误导性声明,香港法院就 IPAD 商标纠纷案件尚未正式开庭,更未作出判决。”  苹果今年 2 月 14 日晚间曾发布声明称,“多年前,我们购买了唯冠公司在全球十个不同国家的 iPad 商标权。唯冠拒绝承认和履行涉及中国部分的协议。香港法院已支持 Apple。”并于 2 月 17 日,曝光此前声称的香港法庭关于 iPad 商标权的判决书。

  2012年 4 月 15 日是“泰坦尼克号”沉船 100 周年纪念日,美国纽约格恩西拍卖行将在 4 月一次性拍卖 5500 多件“泰坦尼克号”遗物,瑞士罗曼·杰罗姆钟表制造公司也将在今年推出用“泰坦尼克号”残骸打造的腕表,而好莱坞经典灾难爱情电影《泰坦尼克号》也将在今年 4 月以 3D 形式重返银幕。  事实上,2012年不仅是“泰坦尼克号”在北大西洋撞冰山沉没的 100 周年纪念日,同时还是另一个鲜为人知的月球最近“近地点”100周年纪念日。月球千年一遇的罕见“近距离”对海洋潮汐形成了强大的影响,导致月球对海洋潮汐的引力影响比平时至少增强了 74%。  美国得克萨斯州大学的科学家们相信,,所以归根结底,也许月亮才是导致“泰坦尼克号”最终撞上冰山而沉没的“罪魁祸首”。    1912年 4 月 15 日凌晨,20世纪初最大、最豪华的远洋客轮“泰坦尼克号”由英国南安普顿驶往美国纽约市的处女航途中,在加拿大纽芬兰岛附近的北大西洋上因为撞上冰山而沉没,导致至少 1523 人遇难。  100年来,关于“泰坦尼克号”沉没的原因众说纷纭,存在多种不同的说法,有的说法称是因为轮船航速太快,导致根本没有时间避开冰山;有的说法称“泰坦尼克号”上使用了大量不符合质量要求的次品铆钉,导致“泰坦尼克号”船身钢板外壳和冰山相撞后立即发生开裂;还有的说法称“泰坦尼克号”舵手罗伯特·希契斯在慌乱之中听错命令,转错了方向舵,从而导致“泰坦尼克号”不幸撞上冰山而沉没。  然而日前,美国得克萨斯州大学物理学专家唐·奥尔森和鲁塞尔·多谢尔在最新一期美国天文学杂志《天空和望远镜》上撰文披露,“泰坦尼克号”撞上冰山沉没可说是由一系列“巧合”造成的,而导致“泰坦尼克号”沉没悲剧的“罪魁祸首”,其实可能是天上的月亮。  “泰坦尼克号”二副查尔斯·莱特尔获救后面对英国调查团的询问时,曾解释客轮沉没当晚的天气状况说:“当时天上没有月亮。”幸存乘客劳伦斯·比斯利后来也在他的著作《泰坦尼克号沉没记》中称,“泰坦尼克号”撞上冰山时,当时夜空中并没有月亮,只有群星闪烁。在那宿命的夜晚,如果天空中有明月照耀,那么“泰坦尼克号”上的观望哨就可能会及时发现冰山,从而避免致命的碰撞。    然而事实上,“泰坦尼克号”沉没当晚天空中月亮“缺席”也许只是导致泰坦尼克号撞上冰山的部分原因而已,美国科学家研究发现,1912年春天,北大西洋航运线路上之所以出现数目异乎寻常的大量冰山,很可能是由一起千年不遇的天文现象引发的!  科学家研究发现,1912年 1 月 4 日那天,地球和太阳、月球形成了一条直线,同时那一天,月球距地球的“近地点”距离是 1400 年时间间隔中最近的距离。  研究发现,1912年 1 月 4 日,月球距地球的“近地点”距离只有 35.6375 万公里,而平时的“近地点”距离大约为 36.3 万公里。  比利时天文学家简·米尤斯通过精确计算发现,在历史上要找到一个比 1912 年 1 月 4 日更近的月球“近地点”距离,需要回溯到公元 796 年,当年一个最近的月球“近地点”距离大约是 35.6366 万公里,而未来则要等到 2257 年,才会出现一个比 1912 年更近的月球“近地点”距离——35.6371万公里。这意味着 1912 年 1 月 4 日月球到地球的“近地点”距离,堪称是至少 1400 年时间间隔中最近的距离。    这一史上罕见的月球“近地点”距离必将在海洋上引发异常凶猛的“近地点潮”。除此之外,科学家还发现,1912年 1 月 4 日当天,月球和太阳分别位于地球的反方向,使得当时的月亮是满月,从而还会导致特别高低起伏的“朔望潮”;同时那一天,地球距太阳的“近日点”距离也正好处于一年之中的最近位置,导致太阳引力对潮汐的影响也正好处于一年之中最强大的时段。这三大天文现象非常“巧合”地在同一天出现,导致那一天的海洋潮汐受到月球和太阳引力的影响变得尤其强大,科学家测算发现,这些“巧合”导致那一天月球对海洋潮汐的引力影响比平时至少增强了 74%。  美国科学家相信,正是 1912 年 1 月 4 日那一天异常起伏的海洋潮汐所产生的强大冲撞和震撼,导致撞上“泰坦尼克号”的那块冰山在那天脱离了它所在的格陵兰岛冰川,最后漂向北大西洋,并最终导致了“泰坦尼克号”的沉没。    美国科学家相信,西格陵兰岛的冰川是北大西洋航线上的那些冰山的主要来源,格陵兰岛海岸的冰川由于受到剧烈起伏的海洋潮汐的冲撞影响,冰川边缘开始分裂,从而形成一块块体积更小的冰山,随后会被海洋潮流带往北大西洋航线。  事实上研究人员早就发现,1912年春季,北大西洋航线上的冰山数目比往年异乎寻常的多,科学家将那年北大西洋航线冰山异常之多的现象归结于北极气候“变暖”原因。  然而直至今天,美国科学家才终于意识到,真正造成 1912 年春天北大西洋冰山异常增多的原因,极有可能就是那年 1 月的地球、月亮和太阳形成一条直线以及月球千年罕见“近地点”距离所造成的。  事实上,加拿大纽芬兰纪念大学已故研究专家福格斯·沃德在 1995 年的《海岸研究杂志》上就曾提出过这一怀疑,但却没有引起足够的重视。当时沃德称,由于 1912 年 1 月 4 日异常起伏的巨大海洋潮汐,导致“杰科布夏文冰川”上的冰块不断分裂成一块块掉入迪斯科海湾的冰山,沃德当时就曾得出一个推论:“撞上‘泰坦尼克号’的那块冰山,可能就是在 1912 年 1 月 4 日左右从冰川上分裂出来掉入迪斯科海湾的。”这块从格陵兰岛冰川上分裂出来的冰山掉入海洋后,随着海洋潮流以极快的速度驶向“最后的目的地”,直到在 1912 年 4 月 15 日凌晨撞沉了“泰坦尼克号”。    也有科学家质疑月亮弄沉“泰坦尼克”的说法,冰山在海洋中的漂流速度通常很慢,行经 1200 到 1500 海里的距离通常要花 4 到 5 个月时间,从格陵兰岛迪斯科湾到北大西洋“泰坦尼克号”船难地点约有 1640 海里。这意味着按照正常速度,一块冰山从格陵兰岛海湾驶到“泰坦尼克号”出事地点应该得花 5 个半月。如果撞上“泰坦尼克号”的冰山是当年 1 月 4 日因为异常海潮的冲击影响而从格陵兰冰川上脱落的,那么它的“旅行速度”未免过快了一点。  此外,还有海洋学家称,西格陵兰岛的海洋潮流通常会先将冰山带往北部的巴芬湾,然后再以逆时针方向漂流,最终被“拉布拉多潮流”带往北大西洋。这样的话,西格陵兰岛冰川上分裂的冰山抵达“泰坦尼克号”出事地点,可能还要花更长的时间。  然而美国专家仍然坚信,1912年春天北大西洋航线上的冰山出奇之多,显然和当年 1 月份的罕见天文现象和潮汐异常有关。研究专家称,一些冰山有时候会在加拿大北部海岸搁浅,然后第二年又被强大的海潮带动重新漂浮起来,所以也有专家怀疑,撞上“泰坦尼克号”的冰山也许并不是在 1912 年、而是在 1911 年就从冰川上脱落的,它在漂向大西洋的途中被搁浅在了加拿大北部海岸上,然后在 1912 年 1 月 4 日由于受到罕见天文现象和异常潮汐的影响,再次漂浮了起来,从而有足够时间在 4 月 15 日驶至和“泰坦尼克号”发生相撞的死亡终点。  所以不管怎么说,“泰坦尼克号”的沉没都和 1912 年 1 月 4 日的天文现象有关,千年罕见的月球“近地点”距离对海洋潮汐造成尤其强大的引力影响,海洋潮汐的猛烈起伏和冲撞导致更多的冰山从格陵兰冰川上分裂下来,或使搁浅在加拿大北部海岸的“老冰山”重新漂浮起来,然后一路驶向了和“泰坦尼克号”最终发生相撞的宿命航线。  撞沉“泰坦尼克号”的冰山  一块搁浅在加拿大北部海岸的冰山,如果遇到罕见的强大海潮,

分类:兴趣

时间:2016-08-06 12:22:01