Questions tagged «mongodb»

4
为什么将MySQL用于字典网站是个坏主意?
我打算设计和建立一个数据库,以存储词典条目(通常是单个单词)及其在另一种语言中的含义。因此,例如,表Glossary必须具有条目和定义,并且每个表记录都具有对存储在其中的记录的ID的引用Tag(每个条目必须具有标签或类别)。 由于我的数据具有结构,因此我认为使用SQL数据库(如MySQL)并不是一个坏主意;但是人们说MongoDB的性能要好得多。 在客户端,应用程序必须能够提供一个具有自动完成功能的搜索框,该框使用后端提供的REST API。在这种情况下使用MySQL是否安全?还是应该为此使用MongoDB或任何其他解决方案的ElasticSearch?应该以这种方式存储和访问数十万条记录。

8
在数据库中存储可重新排序的列表
我正在开发一个愿望清单系统,该系统中用户可以将商品添加到他们的各种愿望清单中,并且我打算允许用户稍后重新订购这些商品。我不确定如何将其存储在数据库中同时保持快速且不会陷入混乱的最佳方法(此应用程序将由相当大的用户群使用,所以我不希望它崩溃清理东西)。 我最初尝试了一个position列,但是当您移动其他每个项目的位置值时,似乎效率很低。 我见过人们使用自引用来引用上一个(或下一个)值,但是同样,您似乎必须更新列表中的许多其他项。 我见过的另一种解决方案是使用十进制数字,并且仅将项目粘贴在它们之间的间隙中,这似乎是迄今为止最好的解决方案,但我敢肯定必须有更好的方法。 我要说的是,一个典型的列表最多可以包含20个左右的项目,并且我可能会将其限制为50个。重新排序将使用拖放操作,并且可能会分批进行以防止出现竞争情况,例如ajax请求。如果有关系,我正在使用postgres(在heroku上)。 有人有什么想法吗? 为任何帮助加油!

2
生成唯一且安全的标识符以供“有时离线” Web应用程序使用的策略
我有一个基于Web的项目,允许用户联机和脱机工作,我正在寻找一种为客户端记录生成唯一ID的方法。我想要一种方法,该方法在用户脱机时(即无法与服务器对话)有效,并且保证是唯一的并且是安全的。通过“安全”,我特别担心客户端(恶意或以其他方式)提交重复的ID,从而严重破坏数据完整性。 我一直在做一些谷歌搜索,希望这已经解决了。我还没有找到任何非常确定的东西,尤其是在生产系统中使用的方法方面。我发现了一些系统的示例,在这些系统中,用户将仅访问他们创建的数据(例如,在多个设备上访问的Todo列表,但仅由创建它的用户访问)。不幸的是,我需要一些更复杂的东西。我确实在这里找到了一些非常好的想法,这些想法与我一直认为事情可能有效的方式是一致的。 以下是我建议的解决方案。 一些要求 ID应该是全局唯一的(或至少在系统中唯一) 在客户端上生成(即通过浏览器中的javascript) 安全(如上所述和其他方面) 数据可以由多个用户查看/编辑,包括未编写数据的用户 不会对后端数据库(例如MongoDB或CouchDB)造成严重的性能问题 拟议的解决方案 当用户创建帐户时,将为他们提供一个uuid,该uuid由服务器生成,并且在系统内是唯一的。此ID不得与用户身份验证令牌相同。我们将此ID称为用户的“ ID令牌”。 当用户创建新记录时,他们会在javascript中生成新的uuid(如果可用,则使用window.crypto生成。请参见此处的示例)。该ID与用户创建帐户时收到的“ ID令牌”并置。现在,此新的复合ID(服务器端ID令牌+客户端uuid)是记录的唯一标识符。当用户在线并将此新记录提交到后端服务器时,该服务器将: 将其标识为“插入”操作(即不是更新或删除) 验证组合键的两个部分都是有效的uuid 验证所提供的复合ID的“ ID令牌”部分对于当前用户是否正确(即,它与服务器在创建用户时分配给该用户的ID令牌相匹配) 如果一切copasetic,插入数据到数据库(小心做插入,而不是一个“更新插入”,这样如果ID 确实已经存在,它不会更新错误现有记录) 查询,更新和删除不需要任何特殊逻辑。他们将简单地以与传统应用程序相同的方式将id用于记录。 这种方法的优点是什么? 客户端代码可以在脱机时创建新数据,并立即知道该记录的ID。我考虑了替代方法,即在客户端上生成一个临时ID,然后在系统联机时将其替换为“最终” ID。但是,这感觉很脆弱。特别是当您开始考虑使用外键创建子数据时,也需要对其进行更新。更不用说处理ID更改后会更改的网址。 通过将ID组合为客户端生成的值和服务器生成的值,每个用户都可以在沙箱中有效地创建ID。这旨在限制恶意/流氓客户端可能造成的损害。同样,任何id冲突都是基于每个用户的,而不是整个系统的全局冲突。 由于用户ID令牌与他们的帐户相关联,因此ID仅可以由经过身份验证的客户端(即用户成功登录的地方)在用户沙箱中生成。这旨在防止恶意客户端为用户创建错误的ID。当然,如果用户的身份验证令牌被恶意客户端窃取,他们可能会做坏事。但是,一旦身份验证令牌被盗,该帐户便会受到威胁。如果确实发生了这种情况,那么所造成的损害将仅限于被盗用的帐户(而不是整个系统)。 顾虑 这是我对这种方法的一些担忧 这样会为大型应用程序生成足够唯一的ID吗?有没有理由认为这会导致id冲突?javascript可以生成足够随机的uuid使其正常工作吗?看起来window.crypto 相当广泛,该项目已经需要相当现代的浏览器。(此问题现在有一个单独的SO问题) 我是否缺少任何漏洞,这些漏洞可能允许恶意用户破坏系统? 查询由2个uuid组成的组合键时,是否有理由担心数据库性能。应该如何存储此ID以获得最佳性能?两个单独的字段还是一个对象字段?Mongo和Couch会有不同的“最佳”方法吗?我知道在执行插入操作时,使用非顺序主键会导致明显的性能问题。为主键自动生成一个值并将该ID存储为单独的字段会更聪明吗?(此问题现在有一个单独的SO问题) 使用这种策略,可以很容易地确定一组特定记录是由同一用户创建的(因为它们都共享相同的公共可见id令牌)。虽然我看不到有任何立即出现的问题,但最好不要泄露比内部需求更多的信息。另一种可能性是对复合键进行哈希处理,但这似乎比其价值更大。 如果用户发生ID冲突,则没有简单的恢复方法。我想客户端可以生成一个新的id,但这似乎确实是不应该发生的。我打算解决这个问题。 只有经过身份验证的用户才能查看和/或编辑数据。这是我的系统可接受的限制。 结论 以上是合理的计划吗?我意识到其中一些归结为基于对相关应用程序的更全面了解的判断调用。

5
我们什么时候应该使用MongoDB?
MongoDB是一个NoSQL数据库,我发现它非常易于使用。最近,我不得不开发一个简单的应用程序,该应用程序需要使用HTTP请求收集一些数据并在处理数据后存储一些结果,然后我尝试使用MongoDB。 通过这种经验,我发现使用它比使用传统的关系数据库要好得多,并且由于我是开发人员而不是DBA,因此极大地简化了我的工作。 不过,有时我不确定何时应该使用MongoDB代替传统的关系数据库(如SQL Server或MySQL)。 在那种情况下,何时可以使用MongoDB代替关系数据库?是否有关于MongoDB的重大警告,使其在某些情况下不合适?

3
后端ID是公开的还是不公开的?
根据这个人说的话:http : //toddfredrich.com/ids-in-rest-api.html 假设他关于使用UUID识别api资源是正确的。然后我遇到麻烦,尝试以这种方式实现它,这是: class FooEntity { final String id = null; //auto-generated by my backend (mongodb), not shared final UUID uid = UUID.randomUUID(); //the resource id } (在客户端和服务器之间,发送和接收DTO,而不是数据库实体。) 现在的问题是,这id不再有用,因为我不再使用它。客户端发出请求,uid所以为什么还要打扰2个id?然后我们回到开始的同一期。如果我将UUID设置为主键(_id),那么我会将后端ID公开。 除此之外,还有效率主题。我已经读过,通过ObjectId进行索引比UUID效率更高。

2
在MongoDB的键中插入带有`.`的JSON文档
首先,这更多的是设计问题,而不是编程问题。 我正在创建一个应用程序,在其中我必须获取现有的JSON数据并将其插入MongoDB。我发现某些JSON文档.的密钥中有一个句点。我在MongoDB文档中读到,在MongoDB .中不允许将句点用作键,因为它们用于查询。 我在Web应用程序中没有做很多插入,这几乎是一次插入。另外,我主要会检索整个文档,而不是查询部分文档,因为我需要获取所有数据。 因此,考虑到我的需求,关于如何存储JSON文档,我有两种选择: 在JSON中搜索密钥中的句点并转义,然后将其插入MongoDB。 将整个JSON转换为BSON格式并按原样存储它们,从而避免转义的需要,并在需要时在MongoDB外部手动解析JSON 您能否告诉我哪种设计更好,因为我无法得出结论。
14 json  mongodb 

1
如何表示我的MongoDB数据库的架构图?
我有一个MongoDB数据库,我想正确地记录其架构设计。我知道MongoDB是一个NoSQL数据库,本质上是无模式的,但是我确实通过我的应用程序强制执行一个模式,并且我希望用一种比打印findOne()结果更好的方式表示它。 我看到许多人使用ER或UML,但是我觉得将NoSQL数据库表示为关系数据库是不正确的,至少看起来很奇怪。 使用UML的示例:MongoDB:如何在论文中表示模式图? 我认为人们会使用不同的模型。我进行了搜索,到目前为止,所看到的是MongoVUE,它提供了一个不错的Tree视图来理解该模式,但是它不便于打印。 NoSQL世界还缺少我一些东西吗?还是应该休息并坚持使用传统的UML?

6
就我而言,MongoDB是正确的选择吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我将在Rails中构建我的第一个真实项目,该项目包含一个由3个主要部分组成的网络应用程序: 不使用数据库的静态部分 用户注册部分将需要一个数据库,我可以使用MySQL,因为每个用户的行将具有相同的字段 用户可以在其中创建,组织,编辑...项目的“应用”,并与其他用户共享 将有几种项目类型,每种类型都有不同的选项,例如,我可能有带有以下选项的“视频”项目: ID 用户身份 collection_id 标题 平台(如果嵌入式) 网址(如果已嵌入) 文件名(如果托管在我的应用程序中) 文件大小(我的应用程序上托管的ID) 和“地图”项: ID 用户身份 collection_id 标题 平台(谷歌地图,必应地图...) 位置 网址 地图尺寸 对于用户,我可能会使用MySQL作为项目,因此MongoDB的灵活性可能会很有用,因为每个项目可能需要与另一个项目不同的选项 到目前为止,我一直使用PHP和MySQL(始终在小型项目的共享主机上使用),而可扩展性对我来说是一个全新的词。 我有时间学习,但我希望能够在1个月内完成一些具体的工作。 我已经阅读了很多有关MongoDB和NoSQL以及RDMS和MySQL的文章,尝试之后,我不得不说我喜欢MongoDB的工作方式:没有表,没有行以及它的文档JSON像这样: 在我的情况下,您会推荐什么?为什么? 关于可伸缩性,MongoDB可能存在问题?如果是的话(以数据库大小计),是否会出现这些问题,从而使我的应用程序速度大大降低? 编辑:应用程序将如何工作 由于许多人问这是我希望该应用程序如何工作: 用户注册 他已登录 他创建了自己的第一个收藏系列,可以创建无限的物品 项目是各种类型的,每种类型需要在数据库中保存不同的数据,并且可以添加或修改项目的类型 用户可以在其中创建其他集合和项目。 因此,对于集合及其内部的项目,我们都有CRUD,每个集合/项目都针对特定的用户 MySQL的主要问题是它没有灵活的架构,有办法解决这个问题(解决方法?)? 考虑NoSQL时,我唯一的疑问就是联接,例如,鉴于某个特定的选择,我想检索与集合中id = user_id的User相关的数据 编辑:继续使用MySQL的想法 在“项目”表中创建带有可选设置的字段,每个设置均用|分隔。或其他符号。 然后,我将在某处保存每个项目的可选设置的结构,例如,“ notes”项目类型需要两个可选设置“ colour”和“ strange_setting”,当我从MySQL获取数据时,我会将可选设置的字段拆分为一个知道数组中的第一项是用于“颜色”的,依此类推。 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.