Questions tagged «nosql»

提出SQL(关系)数据库替代解决方案的数据库,可以面向文档,键/值,图,对象,...

1
数据模型在所谓的“ NoSQL”数据库中对可伸缩性和性能有多大影响?
如果不带CAP定理(一致性,可用性,分区:选择两个),就永远无法谈论所谓的“ NoSQL”数据库。如果您不得不说,在MongoDB(分区,一致性)和CouchDB(可用性,分区)之间,首先需要考虑的是“我需要正确的数据还是需要一直访问?”。 这些新的数据库中取得进行分区。但是,如果我不这样做怎么办?如果我只是想拥有一个键/值,列,文档,任何数据库而不是一个关系数据库,并且只创建一个服务器实例而不进行分片,那该怎么办呢?在那种情况下,我既没有可用性又没有一致性吗?MongoDB不需要复制任何内容,因此可以使用。而且CouchDB将只有一个数据源,因此它将非常一致。 因此,那意味着在那种情况下,MongoDB和CouchDB在用例方面几乎没有区别?好吧,当然除了性能,API和其他功能外,但这更像是在PostgreSQL和MySQL之间进行选择,而不是拥有两个根本不同的要求。 我在这里吗?是否可以通过不创建多个实例将AP或CP数据库更改为AC数据库?还是我缺少什么? 我们反过来问这个问题。如果我使用一个关系数据库,比如说MySQL,并将其置于主/从配置中,该怎么办?我不使用ACID事务如果我要求立即将所有写入同步到从属服务器,那岂不是使其成为CP数据库吗?而且,如果我将其同步了一些预定义的时间间隔,并且客户端是否从从属设备读取过时的数据也没关系。那不是将它变成AP数据库吗?这是否意味着如果我放弃ACID合规性,仍然可以对部分数据库使用关系模型? 本质上:在CAP定理中,您准备放弃的可扩展性要比基础数据模型还重要吗?具有列,文档,键值等内容是否可以增强关系模型的可伸缩性?我们可以设计一个完全为分区容忍度设计的关系数据库吗?(也许它已经存在)。我们可以使NoSQL数据库ACID兼容吗? 抱歉,它有很多问题,但是最近我阅读了很多有关NoSQL数据库的信息,在我看来,使用它们的最大好处是,它们更适合数据的“形状”,而不仅仅是分区CAP并放弃了ACID合规性。毕竟,并不是每个人都有太多数据需要分区。在我甚至考虑对数据进行分区之前,不使用关系模型是否会对性能/可伸缩性有所帮助?


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

5
我的团队害怕带有外键关系的关系数据库实体,我不明白为什么
我刚从大学毕业,所以对关系数据库的熟悉程度大部分来自于我的数据库课程,在该课程中,BCNF或3NF以外的任何事物都是荒唐的。当然,这是极端的目的,但是我的工作团队似乎确实将其推向了另一端。 在我们的微服务数据库架构中,实体很少有多个表。您通常会标准化到另一个表的所有内容都存储在json列中。如果以后发现需要查询此json中的属性之一,则会添加一个新列,并将数据存储在两个位置(是的,在同一表的两个不同列中)。 在许多情况下,这些json列绝对具有优势。如果您不需要查询数据,也不必单方面更改数据(这显然是您无法预测的),那么这不是一个坏主意。再加上我们的许多服务都看不到服务器,或者托管在具有淫秽磁盘空间的计算机上,无法满足他们的需求,因此数据复制不是一个大问题。(尽管我通常会出于哲学目的避免这种情况) 当前,我们正在构建一个服务,该服务根据规则所拥有的一组条件匹配规则,然后在规则为真(例如,所有条件都为真)时执行与这些规则关联的一组操作。我的最直接构建此服务的小组认为,从架构规则中规范动作和条件有很大的好处。显然,这些表与规则ID保持外键关系。从我们的角度来看,我们可以避免条件上的数据重复,这使我们能够确保仅对它们进行一次评估,并且在需要它们时很容易找到我们需要的条件和规则,而无需提取每个规则并在内存中进行搜索。 今天,他与我们的一位首席工程师交谈,试图使我远离这种模式。试图以各种方式争辩我们实际上并不需要它,这将在将来引起性能问题,并引用了我们拥有的旧单片,这是设计上的麻烦。他将我们正在做的事情称为“旧方法”,将带有json的平面表称为“新方法”。他争辩说,在我想要原子性的地方,我们不需要它,而不是查询,我们应该在内存中做更多的事情。这是我们许多服务现在遵循的设计原则。我们预计数据量不会大幅增长,这将使我们的查询保持快速。我们确实期望在规则评估和执行操作上花费大量时间。 我知道非关系数据库近年来已经变得越来越流行,但是即使在积极地搜索有关外键关系对性能的影响的信息时,我也看不到很多信息可以证明他的观点。我想他们可能会倾向于引入可能导致问题的大型事务,但这似乎是一个独立于外键本身的问题。 这是我的天真吗?还是我和我的子团队确实缺少某些东西?我没有明确提供有关我们问题的详细信息,因为我不一定正在寻找解决方案。考虑到这是我们大型团队的共同趋势,我真的很好奇他们是否对此有所帮助。

4
存储n-gram数据
我希望就存储n- gram数据的问题进行一些讨论。在我的项目中,我正在尝试解决所有我知道(n -1)个数据项的语言问题,并希望在所有适用的n- gram上使用线性插值来统计地猜测我的n。(是的,有一个标记器根据其词典将标记分配给已知单词,还有一个后缀树试图猜测未知单词的单词种类;这里讨论的n -gram组件将负责解决歧义。) 我最初的方法是简单地将所有观察到的n元(对于n = 1..3,即会标,二元组,三元组)数据存储在相应的SQL数据库中,并称之为一天。但是我的项目要求可能会改变,以包括其他向量长度(n),我希望我的应用程序能够适应4克语言而无需进行大量工作(更新架构,更新应用程序代码等);理想情况下,我只是简单地告诉我的应用程序现在可以处理4克代码,而不必太多(或根本不需要)更改代码并从给定的数据源训练其数据。 总结所有要求: 能够存储n克数据(最初用于n = {1,2,3} 能够更改应使用哪种n- gram(在应用程序运行之间) 能够(重新)训练n- gram数据(在应用程序运行之间) 能够查询数据存储(例如,如果我观察到A,B,C,我想知道使用我训练有素的4、3、2、1克数据集后最常观察到的项目) 该应用程序很可能是读取繁重的,很可能不会经常重新训练数据集 该解决方案采用.NET Framework(最高4.0) 现在,哪种设计更适合此类任务? 由SQL服务器(MSSQL,MySQL等)为每个n管理的固定表(例如,用于二元语法,三元语法等的专用表) 还是将第一个n -1 存储为文档的键的NoSQL文档数据库解决方案,并且文档本身包含第n个值和观察到的频率? 还是有所不同?

3
如果使用Firebase,在哪里放置业务逻辑?
我将开始开发一个单页面Web应用程序,该应用程序非常简化了多用户文档系统。前端可能会使用Angular2。 该项目的期限很短,因此我一直在寻找“捷径”,即使用各种现成的服务,而不是从头开始实现所有内容。 我将需要某种后端来存储应用程序数据。我环顾四周,发现Firebase,它似乎取消了创建单独的后端和API以与前端通信的工作。 但这也意味着我必须将业务逻辑放在Angular2 Web应用程序的前端,对吗? 因此,如果我将来某天想做一个移动应用程序的前端,我是否必须复制业务逻辑代码? 我想替代方案是创建一个包含业务逻辑并使用Firebase进行数据存储的后端,但这似乎有点不可思议(我不能只在后端使用ORM或其他东西来获得相同的结果,而无需还有很多工作吗?) 例如,如果人们想使用Firebase,人们通常如何构造这类应用程序?

3
哪种数据存储最适合我的情况?
我正在开发一个涉及数据库中更新/选择查询执行非常高的应用程序。 我有一个基本表(A),该表每天将有一个实体约500条记录。对于系统中的每个用户,将根据用户的某些首选项创建此实体的变体,并将它们存储在另一个表(B)中。这是通过每天在午夜运行的Cron作业完成的。 因此,如果表A中有10,000个用户和500条记录,则该天表B中将有500万条记录。我总是将数据保留在这些表中一天,午夜将历史数据存档到HBase。此设置运行良好,到目前为止,我没有任何性能问题。 最近业务需求发生了一些变化,现在基本表A中的某些属性(对于15-20条记录)将每20秒更改一次,因此我必须重新计算表B中所有这些变化记录的某些值,全部用户。即使仅更改20条主记录,我也需要重新计算并更新200,000条用户记录,这花费了20秒钟以上的时间,然后才发生下一次更新,最终导致所有Select查询排队。我从在线用户那里得到3个获取请求/ 5秒,这导致6-9个选择查询。为了响应api请求,我总是使用表B中的字段。 我可以购买更多的处理能力来解决这种情况,但是我对拥有一个可以处理甚至一百万用户的适当缩放的系统感兴趣。 这里有人可以提出更好的选择吗?Nosql +关系数据库对我有帮助吗?是否有任何平台/数据存储可让我频繁地更新数据而不会锁定,同时又使我能够灵活地在实体的各个字段上运行选择查询?

7
嵌套实体和叶实体属性的计算-SQL或NoSQL方法
我正在从事一个名为“菜单/食谱管理”的业余项目。 这就是我的实体及其关系的样子。 A Nutrient具有属性Code和Value 一个Ingredient具有集合Nutrients 一个Recipe具有的收藏,Ingredients有时也可以具有其他的收藏recipes 一个Meal有一个收集Recipes和Ingredients 一个Menu有集合Meals 关系可以描述为 在其中一个页面中,对于所选菜单,我需要显示根据其成分(膳食,食谱,成分和相应的营养素)计算出的有效营养素信息。 到目前为止,我正在使用SQL Server来存储数据,我正在从C#代码导航链,从菜单的每一餐开始,然后汇总营养值。 我认为这不是一种有效的方法,因为每次请求页面时都会进行此计算,并且成分会偶尔更改。 我在考虑有一个后台服务,该服务维护一个称为MenuNutrients({MenuId, NutrientId, Value})的表,并且在任何成分(餐,菜谱,成分)发生变化时,将使用有效营养素填充/更新该表。 我认为GraphDB非常适合此要求,但是我接触NoSQL的机会有限。 我想知道显示给定菜单营养的这种要求的替代解决方案/方法是什么。 希望我对场景的描述清楚。

2
如何正确设计NoSql数据库架构?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我想了解有关NoSQL数据库的更多信息,所以我选择从头创建一个新项目来处理足球比赛的结果。在我的传统关系数据库中,我有比赛,团队,成绩和课程表。显然都是相关的。 改用NoSQL方法设计这样的项目可能是一种好的方法?

4
不同类型的NoSQL数据库的缺点
这是我的问题:不同类型的NoSQL数据库有哪些弱点?具体来说,键值存储,图形数据存储和文档存储的弱点是什么? 我一直很容易找到优点,但是有关缺点的文档似乎很少。 编辑:相互比较,以及与关系数据库比较。

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.