mongdb mysql geospatial 比较_MongoDB Vs MySQL – Benchmarks Re-Creating Typical CMS Functionality to Co...

我知道这是一个漫长的标题, 但我真正想用的只有一半…

因此,像其他人一样正在关注到最近的数据库技术的发展趋势,我已经听说过No-SQL ,因为它是基于JSON的格式,听说它很快且对普通开发者更为平易近人, 但我从来没有时间坐下来,真正调查的东西。然后我听到关于MongoDB的,特别是关于他们精湛的地理位置功能 –http://www.mongodb.org/display/DOCS/Geospatial+Indexing – 你可能已经知道,我是一个不会应付地理位置的人,所以当我听说,Foursquare 也已经使用在MongoDB时,我立刻上钩了。

因此,从哪里开始...?首先,我们需要一些地理数据, and where better to get that than from GeoNames – where you can download theallCountries.zip file (containing 7 Million+ records at over 200 MB), or simply grab the country-specific information for the country you reside.

我们需要的把数据导入到MySQL,不仅使我们可以比较接近搜索的速度,但也让我们可以学习如何从MySQL导出到MongoDB的,这真的是既灵活又一个宝贵的教训。

如果我们打算使用GeoNames的数据,我们必须首先创建一个表,使用下面的SQL(字段名称为下一阶段特别重要的):

创建完geonames table,我们可以导入TXT文件内所载的数据, 我们只是从 GeoNames 下载通过使用 SQL 类似下面 (你如果需要更换的TXT文件的位置的,你只需要提取它从您下载的ZIP文件):

现在,我们应该在我们的数据库中有超过700万的地方(假设你勇敢地使用allCountries.txt文件,说实话,它可能太大对为下一阶段,当你在家里运行个人电脑的时候,会引发几个问题像是他干的,)。一旦你有你的MySQL数据库中的记录,不要忘记 “latitude” 和 “longitude”字段添加一个索引,为了之后给测试一个公平的机会。

在这个阶段,我们应该开始考虑获得MongoDB的设置,幸运的是,MongoDB的在线文档和普遍社区精神非常好。对于这种比较的目的,我们将使用MongoDB和PHP测试的结果,但在未来的“如何”,我也希望记录我对NodeJS的发现!

Let’s download MongoDB – http://www.mongodb.org/downloads – then run-through the getting-started guides –http://www.mongodb.org/display/DOCS/Quickstart. 我发现设置在PC和Mac同样容易。只需下载安装包,保存某处,创造必要的“数据”文件夹,然后运行两个建议控制台可执行文件的“mongod.exe”和“mongo.exe”如果三加三等于6,一切都正常工作!假设MongoDB的设置是一件轻而易举的,而你则有复制正确的能力也。dll (for windows)或 .so (for Mac)到正确的“扩展”文件夹中指定你的php.ini文件,并记录这里 – PHP Drivers for Mongo.

现在,我们准备到把MySQL数据导入MongoDB,但我要告诉你的方法不是大型数据集(应该使用导入功能)的首选方法, 这样教你最根本的MongoDB的功能,其中包括添加新的集合(表)和对象(记录),而且还更新对象和检索对象, 所有php语法应该让php开发者很舒服。事实上,下面的代码提供一切你需要的,不仅从MySQL到MongoDB导入数据,也运行比较测试,看看每个数据库的运行有多快,并返回相同的结果。

开始之前,请注意从MySQL到MongoDB的所有700万条记录的是要采取一些时间,几个小时,如果不是整天(然后一些,尤其是使用这些方法),因此,如果你正在做这个作为一种上手方式,并希望一些即时反馈,你真的应该考虑导入一个具体的国家。GeoNames的txt文件,或使用country_code和(或)限制变量迁移一部分MySQL数据到MongoDB。

无论哪种方式,尽管使用,改善和评论,以下所需的代码(作为提醒,这不是最好方式,用来导入大型数据集到MongoDB,但已经完成,所以这种方式容易理解基础):

几件事情要记住运行前或后,检查结果比较,是否你还记得MySQL索引添加到您的latitude和longitudes,更不用说你是否添加你的MongoDB的地理空间的索引,要做这些, 你需要使用Mongo控制台的以下命令(我知道令人讨厌 - 有一些图形用户界面,但是这比它看起来要容易得多):

一些其他有用的控制台指令包括dropping databases:

默认下, 打开Mongo Console启动“test” database, 转换到 geonames 只需简单输入:

总之,MongoDB是快速的。在搜索65411条记录/对象 (我只导入了马来西亚的地理,为了节省时间和学习部分), and 只显示那些 100 KM 半径, 把结果限制在 10, 按距离最近的排第一个, 输出到页面, 使用0.23555 seconds for MySQL, 同样的查询使用 0.00152 seconds with MongoDB – 有几次, 甚至到达了0.00095! 考虑到这只是单用户查询.对MySQL最大的问题,我最初寻求替代品的原因是同一时间只有一个用户可以访问数据库,并发查询被添加到队列中,需要等待轮到自己. 在MongoDB, 这不是问题, 所以真的,真相是,没有他们之间的比较! 之后我们会运行一些并发测试, 以及运行相同的查询使用完整的700万记录集…

但我们如何导入所有的700万+的记录,并执行这些测试…?

不使用上面的方法!我多次尝试几种不同的方式导入所有700万条记录,我能找到的最快最可靠的方法是,首先导出MySQL为CSV的格式。我几次试图从控制台使用mysqldump的,但永远无法得到正确的格式。不管你信不信, 最友好的方法是export from phpMyAdmin in CSV for MS Excel format (第一行是字段名) 因为这样能够之后利用mongoimport的功能.然而,每当我试图导出全部集合,我遇到了问题。我最终做的是,每次导出为CSV的一百万记录。

一旦你拥有所有8个 CSV文件,然后可以导入到MongoDB的使用下面的控制台命令::

做每一部分,并记住这必须从一个标准的终端控制台,而不是从MongoDB的控制台,这是我的第一个错误! 我们所有的700万加记录到数据库后,我们将需要添加在latlng / LOC field,它们尚不存在并且MongoDB地理空间索引需要它们。 要完成这个, 我所发现的最快的方法是JS query, 你首先需要创建一个新的 JavaScript 包含以下内容:

然后我们需要 查询 MongoDB 使用这个 JS file, 这可能是我最喜欢的MongoDB 功能,并可以使用的语法,如从一个普通的终端(而不是MongoDB的控制台)执行:

一旦我们有了place, 我们可以加到Geo-Spatial Index (from the Mongo Console) by typing:

结果是惊人的:

使用MySQL和寻找距离下令最近10位置查询780万条记录的平均165秒!与MongoDB的,相同的查询只用了0.02秒!

除此之外,接下来会发生什么…?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值