- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我现在正在考虑使用 MongoDB。为了使目标明确,这里需要发生的事情:在我的应用程序 Finch(finchformac.com 的详细信息)中,我每天为每个用户提供他们打开的窗口、打开窗口的时间、关闭窗口的时间以及他们选择的标签的数以千计的条目为了它。我需要在线备份这些数据,以便它可以同步到他们的其他 Mac 计算机等。我还需要能够根据他们的数据在线绘制图表,这意味着一些复杂的查询会触及数十万条记录。
现在我已经尝试在应用程序端使用 Ruby/Rails/Mongoid 和 JSON 解析器一次发送 10,000 条记录的增量数据,数据通过后台 mapreduce 作业处理到其他集合。但是,这一切似乎都被阻止了,而且最终太慢了。有什么建议(如果有的话)如何解决这个问题?
最佳答案
您遇到了一个复杂的问题,这意味着您需要将其分解为更小、更容易解决的问题。
问题(如我所见):
您可能希望将其编写为某种 API,为了简单起见(并且由于您在客户端上有大量的备用处理周期),您需要将这些数据 block 在客户端处理成 JSON 以准备好导入数据库。一旦你有了 JSON,你就不需要 Mongoid(你只需将 JSON 直接扔进数据库)。此外,您可能不需要 Rails,因为您只是在创建一个简单的 API,因此请坚持使用 Rack 或 Sinatra(可能使用类似 Grape 的东西)。
现在您需要解决整个“这一切似乎都被阻止并且最终太慢”的问题。我们已经删除了 Mongoid(因此无需从 JSON -> Ruby Objects -> JSON 转换)和 Rails。在我们开始对这些数据执行 MapReduce 之前,您需要确保它足够快地加载到数据库中。很可能您应该构建整个事物,以便您的 MapReduce 支持您的报告功能。对于同步数据,除了传递 JSON 之外,您不需要做任何事情。如果您的数据写入数据库的速度不够快,您应该考虑 Sharding your dataset .这可能会使用一些基于用户的 key 来完成,但您比我更了解您的数据模式。您需要选择分片键,以便当多个用户同时同步时,他们可能会使用不同的服务器。
一旦您解决了问题 1 和问题 2,您就需要处理您的报告。这可能由 Mongo 中的 MapReduce 函数支持。我对这部分的第一条评论是确保您至少运行 Mongo 2.0。 In that release 10gen sped up MapReduce (我的测试表明它比 1.8 快得多)。除此之外,您还可以通过分片并将读取定向到副本集中的辅助服务器(您正在使用副本集?)来实现进一步的增长。如果这仍然不起作用,请考虑构建您的架构以支持您的报告功能。这使您可以在客户端上使用更多周期来完成工作,而不是加载服务器。但是,在您证明传统方法行不通之前,应该保留这种优化。
我希望文字墙能有所帮助。祝你好运!
关于objective-c - 在 Mac 应用程序和 Web 之间同步 'lot' 小块数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9450013/
目前我正在创建一个 C# 应用程序,它必须从现有数据库中读取大量数据(超过 2,000,000 条记录),并将其与数据库中不存在的大量其他数据(也大约 2,000,000 条记录)进行比较。这些比较主
我正在为需要将一些可变长度数组存储到 mysql 数据库中的系统设计数据库。 数组的长度(最多)为数百甚至数千。 新阵列将定期创建,可能每天数十个。 我应该将这些数组存储到一个很快就会变得巨大的表中还
问题:我有两个大型字符串元胞数组A 和B。我想知道识别 A 中哪些元素包含 B 中哪些元素的最快方法。特别是不循环能不能做到? 最小示例:(我的实际 A 和 B 分别包含 7,000,000 和 22
我有这些表: create table person ( person_id int unsigned auto_increment, person_key varchar(40) n
我正在处理一个简单的页面,但遇到固定位置的问题。想知道是否有人有时间帮助我。 在这里复制粘贴所有代码会太多,但我会粘贴一个链接 http://et4891.com/lecture/protosite.
我正在开发一个项目,需要能够将“很多”、“一些”、“很多”、“一些”等修饰符分类为最小百分比 例如“很多” -> 80% 现在我正在考虑简单地创建一个大字典来关联这些修饰符和数值,例如 一些 -> 1
我想将所有数据从工作表复制到另一个新 Excel 文件的另一工作表。我试过这个: Set wkb = Workbooks.Add wkb.SaveAs myNewFile ThisWorkbook.W
项目运行良好,运行良好,编译良好。直到一些看似随机的时间,它才停止变好。 目前,我遇到了200个流浪错误: ./new:4: error: stray '\376' in program ./new:
我正在开发一个 Android(现在只是 Android,以后可能是 iOS)应用程序,它在很大程度上依赖于拍照,将这些照片存储在某个服务器上,并能够在用户需要时检索任何照片这将是非常频繁的。 在深入
我是 codeigniter 的新手,我刚刚学会使用 codeigniter 已经两周了。我在一个 Controller 中使用超过 26 个功能,每个功能加载不同的 View 。我的问题是,当我加载
下面是我的 3 个 cpp 文件和 2 个头文件。我收到了天文数字的错误,而且大多数都非常不清楚。我是 C++ 的新手并且有 C#/Java 背景。 我很清楚以下可能是语法错误。提前感谢您的帮助。 主
我必须在 Java 程序中存储大量单词 (+200k),并且我想快速访问它们。我只需要知道给定的单词是否属于我的“词典”。我不需要像 这样的一对.如果可能的话,我正在标准库中搜索解决方案。 PS:也
我正在开发一个集成了其他 SDK(例如 Facebook SDK 3.5)的 iOS SDK。为了防止冲突并允许我的客户也导入这些 SDK,我想重命名我的代码中的所有类/枚举(例如,将 FBSessi
我的游戏中有很多角色,因此我有很多纹理。当加载纹理图集(包含大约 5 个不同的图像纹理)时,它会增加内存使用并将其保持在该数量。因此,更多的纹理只会使该数字不断上升,直到有时应用程序崩溃。我不需要同时
哇,大戏!框架有很多静态方法。在我上学的地方,我们被告知永远不要使用任何静态,但 Play!像没有明天一样使用它。这样可以吗?如果有,为什么? 我们(我和 7 个人)计划使用 Play!涉及 Web
我需要更改表中列的值,所以我需要这样做: update members set frequence = 1 where frequence <> 1 我有 700 万行受到影响,我需要分批更新 100
嗨,当我尝试将我的应用程序部署到 Heroku 时,我遇到了一些错误。 当我 pip freeze>requirements.txt 时,我收到此错误: “警告:无法生成分发要求 -lotly 2.7
我用 pthread 编写了一个多线程程序,使用生产者-消费者模型。 当我使用英特尔 VTune 分析器来分析我的程序时,我发现生产者和消费者在 pthread_mutex_unlock 上花费了大量
我有一个要求,我必须缓冲大量数据(以 GB 为单位)以供将来使用。由于没有足够的 RAM 可用于缓冲如此大量的数据,我决定将数据存储在文件中。 现在这里的陷阱是,当我将数据写入文件时,其他线程可能需要
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
我是一名优秀的程序员,十分优秀!