当我们在没有指定任何排序顺序的情况下运行Mongo find()查询时,数据库内部使用什么来对结果进行排序?
执行不带参数的find()时,数据库以正向自然顺序返回对象.
对于标准表,自然顺序不是特别有用,因为尽管订单通常接近于订单,但不能保证.但是,对于Capped Collections,自然顺序保证为插入顺序.这非常有用.
但是对于标准集合(非上限集合),使用哪个字段对结果进行排序?它是_id字段还是别的什么?
编辑:
基本上,我想我想要的是,如果我执行以下搜索查询:
db.collection.find({"x":y}).skip(10000).limit(1000);
Run Code Online (Sandbox Code Playgroud)
在两个不同的时间点:t1和t2,我会得到不同的结果集:
我已经在临时数据库上运行了一些测试,我得到的结果与所有3个案例相同(是) - 但我想确定并且我确信我的测试用例不是很彻底.
我的任务是将数据从MongoDB数据库移植到MySQL数据库.(有用于移植强有力的理由-因此它有做).
MongoDB集合:
我们尝试过的安装程序:
我们从MongoDB中一次在内存中获取1K文档,进行必要的处理,然后将它们保存到MySQL数据库,一次批量写入500.
我们面临的问题是每2.5 MB文档,服务器窒息而Mongo响应非常缓慢 - 超时应用程序的数据获取操作(在处理1M文档时释放RAM)
我们正在慢慢地通过杀死mongod进程并在崩溃时每2.5M记录再次启动它 - 但我敢打赌我们做错了什么.
题:
我应该将Mongo服务器移动到基于Linux的大型实例和MySQL移动到Amazon RDS并在PHP中重写转换应用程序吗?会有帮助吗?
我们决定将它们全部放在一个盒子上的原因是在不同的盒子上安装不同服务器的延迟问题 - 但我想如果盒子窒息那就没有实际意义.
我可以尝试哪些其他东西/我可以使用的提示?
感谢您阅读这篇文章!
- 更新01 -
自从我重新启动我的应用程序并进行了以下更改后大约需要6个小时:
我的记忆是100%消耗,但应用程序仍在运行.(上次它在52分钟内嘶哑).Mongo吃了6.8 GB的RAM,MySQL - 450 Megs和转换器应用程序 - 400 Megs(约值).
到目前为止处理了11M的记录 - 但速度从大约500条记录/秒下降到370记录/秒.
接下来的步骤是将Mongo和MySQL服务器隔离在一起,并将所有这些服务器保存在同一个Amazon可用区中,以最大限度地减少延迟.
- 更新02 -
我们对代码进行了一些更改以使用Mongo Cursor并让它自动自动增加,而不是自己执行.skip().limt().这大大加快了这个过程,我们从之前的300多个每秒做了1250条记录.但是,应用程序开始消耗太多内存,并且会耗尽RAM并崩溃,并且需要在每2M记录后重新启动.
我们使用了这段代码:
var docs = db[collectionName].Find(query);
docs.SetBatchSize(numOfResultsToFetchAtATime);
foreach (var d in docs) {
// do processing
}
Run Code Online (Sandbox Code Playgroud)
所以它的作用是一次获取'numOfResultsToFetchAtATime'记录 - …
我想运行以下查询:
-- Main Query
SELECT COUNT(*) FROM table_name WHERE device_id IN
(SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA')
Run Code Online (Sandbox Code Playgroud)
以下查询(来自Main Query的子查询):
SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA'
Run Code Online (Sandbox Code Playgroud)
在7秒内执行,从2.1M行的表中提供2691行.
我解除了上面的主查询,并且在等待5分钟后仍在执行.
最后,我分别执行了子查询,从结果中取出了2691条记录,执行了以下查询:
-- Main Query (improvised)
SELECT COUNT(*) FROM table_name WHERE device_id IN
("device_id_1", "device_id_2", ....., "device_id_2691")
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,这给了我40秒内的答案.
是什么赋予了?为什么MySQL不使用我使用的相同技术并快速给出答案?难道我做错了什么?
直升机,
我是Ruby的新手(使用1.8.6)并且需要知道以下功能是否可以自动使用,如果没有,这将是实现它的最佳方法.
我上课了.并有两个对象:
car_a and car_b
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以进行比较并找出其中一个对象与另一个对象相比有哪些属性?
例如,
car_a.color = 'Red'
car_a.sun_roof = true
car_a.wheels = 'Bridgestone'
car_b.color = 'Blue'
car_b.sun_roof = false
car_b.wheels = 'Bridgestone'
Run Code Online (Sandbox Code Playgroud)
然后做一个
car_a.compare_with(car_b)
Run Code Online (Sandbox Code Playgroud)
应该给我:
{:color => 'Blue', :sun_roof => 'false'}
Run Code Online (Sandbox Code Playgroud)
或者那种效果?
我已经尝试使用Google搜索并在SO上搜索此问题 - 但收效甚微 - 主要是因为我不确定自己是否正确搜索.
我正在使用Visual Studio 2008,C#和Cassini进行ASP.Net Web应用程序项目(而不是网站)进行测试.
但是,每次运行网站时,我都会得到一个URL,例如:
http://localhost:8671/(S(saifdk55xyhalrqbstrtrdiw))/SubjectClassTeacher/Default.aspx
Run Code Online (Sandbox Code Playgroud)
即使我修改了URL并尝试转到:
http://localhost:8671/SubjectClassTeacher/Default.aspx
Run Code Online (Sandbox Code Playgroud)
我被重定向回这个URL.
中心的垃圾值:(S(saifdk55xyhalrqbstrtrdiw))每次编译时都会不断更改,我不知道它为什么会被注入或者如何禁用它.
任何人都可以对这个问题有所了解吗?首先,我想知道为什么会发生这种情况,如何禁用它.
因为当我在IIS上部署网站时会发生这种情况.任何帮助表示赞赏.
谢谢.