问题标签 [non-relational-database]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Google App Engine 上的只读关系数据库?
我有一个中等大小(~100mb)的只读数据库,我想把它放在谷歌应用引擎上。我可以把它放到数据存储中,但是数据存储有点慢,没有关系特性,并且有许多其他令人沮丧的限制(这里不介绍)。另一种选择是将所有数据加载到内存中,但我很快就达到了谷歌强加的配额。最后一个选择是使用 django-nonrel + djangoappengine,但恐怕这个包还处于起步阶段。
理想情况下,我想创建一个使用 blobstore 作为其数据源的只读 sqlite 数据库。这可能吗?
relational-database - 关系数据库和非关系数据库有什么区别?
我知道 MySQL、PostgreSQL 和 MS SQL Server 等解决方案是关系型数据库系统,而 NoSQL、MongoDB 等是非关系型 DBMS。
但是,这两种类型的系统有什么区别?
外行术语更可取。
谢谢。
database - 存储时间序列数据,关系型还是非关系型?
我正在创建一个系统,该系统使用 SNMP 以(可能)5 分钟的间隔轮询设备以获取不同指标的数据,例如 CPU 利用率、磁盘利用率、温度等。最终目标是以时间序列图的形式向系统用户提供可视化。
我过去曾研究过使用 RRDTool,但拒绝了它,因为无限期地存储捕获的数据对我的项目很重要,我希望更高级别和更灵活地访问捕获的数据。所以我的问题是:
在查询图形数据时的性能方面,关系数据库(例如 MySQL 或 PostgreSQL)或非关系数据库或 NoSQL 数据库(例如 MongoDB 或 Redis)更好。
关系型
给定一个关系数据库,我将使用一个data_instances
表,其中将存储为所有设备测量的每个指标捕获的每个数据实例,其中包含以下字段:
领域:id
fk_to_device
fk_to_metric
metric_value
timestamp
当我想为特定设备上的特定指标绘制图表时,我必须查询这个单一的表,过滤掉其他设备,以及为此设备分析的其他指标:
此表中的行数为:
其中d
是设备数量,是为所有设备记录的指标m_d
的累积数量,是轮询数据的频率,是系统收集数据的总时间。f
t
对于一年中每 5 分钟记录 3 台设备的 10 个指标的用户,我们将有不到500 万条记录。
索引
如果没有索引fk_to_device
并且fk_to_metric
扫描这个不断扩展的表会花费太多时间。因此,索引上述字段以及timestamp
(用于创建具有本地化周期的图表)是一项要求。
非关系型 (NoSQL)
MongoDB 具有集合的概念,与表不同,这些表可以通过编程方式创建而无需设置。有了这些,我可以对每个设备的数据存储进行分区,甚至可以对每个设备记录的每个指标进行分区。
我没有使用 NoSQL 的经验,也不知道它们是否提供任何查询性能增强功能,例如索引,但是上一段建议在 NoSQL 下存储数据的结构中完成大部分传统的关系查询工作。
未定
具有正确索引的关系解决方案会在一年内减少到爬行吗?或者 NoSQL 方法的基于集合的结构(与我存储数据的心理模型相匹配)是否提供了明显的好处?
google-app-engine - 在非关系型 DBMS(AppEngine 中的 BigTable)中,我应该如何为群发消息类型的系统设置实体?
想象一下,例如,我有很多用户。每次用户发送消息时,他/她都可以向其他用户列表发送消息(类似于群发电子邮件)。但是,我只想存储一次消息以节省存储空间。因此,当其中一位消息接收者打开他的邮箱时,他/她必须在那里查询该消息。在设置消息系统的实体(表)方面,什么更有效?请注意:在非 RDBMS 中,不允许连接查询。那么这是一个合理的设置,我怎样才能使它更有效(1):
或者我应该采用以下策略(2):
哪种策略似乎更有效?即遍历arraylist 比简单地遍历DBMS 慢吗?
任何意见将不胜感激。
*注意:消息可以任意长,因此我不想存储同一消息的多个副本。
谢谢你。
sql - 如何对时间序列数据运行“五天内”之类的查询?
我想有一种简单的方法来对我的时间序列数据运行类似以下查询的查询:
“相隔 7 天内最典型的事件是什么”?
我可以通过使用 SQL 和 Java 程序来做到这一点,通过查看每一行并运行一个查询,该查询会在 7 天之前或之后查找所有事件,但这不是很优雅,性能也会很糟糕。有没有另一种方法可以优雅地使用 SQL 或不同的查询语言来做到这一点?
简化的表结构如下:
我特别不想描述数据是关于什么的,因为我正在寻找一个通用的解决方案。
mongodb - 非关系型数据库,哪一个是正确的选择
我应该选择哪个非关系数据库(我知道这个问题是一个主观问题,涉及到考虑系统的需求)。
我读了这篇文章cassandra-vs-mongodb-vs-couchdb-vs-redis,但仍然无法决定。
如果这里有经验的人能够在做出这个决定时对要考虑的关键点有所了解,那将是非常好的。
google-app-engine - 关系与非关系数据建模 - 有什么区别
我是数据库新手,从未使用过任何 RDBMS。但是我得到了关系数据库的基本概念。至少我认为我这样做;-)
假设我有一个用户数据库,每个用户都有以下属性:
- 用户
- ID
- 姓名
- 压缩
- 城市
例如,在关系数据库中,我会在一个名为user
- 用户
- ID
- 姓名
- location_id
并有第二张桌子叫做location
- 地点
- ID
- 压缩
- 城市
并且location_id
是location
表中条目的外键(引用)。如果我理解正确,优势就在这里,如果某个城市的邮政编码发生变化,我只需更改一个条目。
所以,让我们转到非关系数据库,我开始使用 Google App Engine。在这里,我真的会对其进行建模,就像它首先写在规范中一样。我有一种user
:
优点是我不需要加入两个“表格”,但缺点是,如果邮政编码发生变化,我必须运行一个脚本来遍历所有用户条目并更新邮政编码,对吗?
因此,现在 Google App Engine 中还有另一个选项,那就是使用ReferenceProperties
. 我可以有两种:user
和location
如果我没记错的话,我现在拥有与上述关系数据库完全相同的模型。我现在想知道的是,首先,我刚才所做的和所做的是否错了,它破坏了非关系数据库的所有优势。我知道,为了获得 zip 和 city 的值,我必须运行第二个查询。但在另一种情况下,要更改邮政编码,我必须遍历所有现有用户。
那么这两种建模可能性在像谷歌数据存储这样的非关系数据库中的含义是什么。以及它们的典型用例是什么,这意味着我什么时候应该使用一个,什么时候使用另一个。
另外一个问题是,如果在非关系数据库中我可以建模与在关系数据库中建模的完全相同,我为什么要使用关系数据库?
抱歉,如果其中一些问题听起来很幼稚,但我相信它们会帮助一些刚接触数据库系统的人更好地理解。
google-app-engine - 具有消息状态的 App Engine 消息系统 - 设计模式
我正在构建一个将托管在 Google AppEngine 上的线程消息传递系统
我根据 Brett Slatkin 在Building Scalable, Complex Apps on App Engine中描述的技术对其进行了建模
我必须确定跟踪用户消息状态的最有效方法的问题。例如,针对特定用户的消息read
, 。archived
deleted
这是我到目前为止提出的解决方案。
我正在使用Datastore+的 StructuredProperty 向消息添加状态MessageIndex
这个解决方案虽然简单,但否定了 MessageIndex 的好处。此外,由于 MessageIndex 与消息数据存储在同一实体组中写入将受到限制。
实现这一目标的最有效方法是什么?添加一个额外的实体组会是一个更好的解决方案吗?
database-design - 用于具有自定义用户标签和字段的大型数据跟踪器的数据模型或数据库系统
我想创建一个允许跟踪项目和相关字段的应用程序。例如,我可能想跟踪我喝了多少咖啡,因此我会创建一个咖啡条目,并可以发布更新,例如从特定位置购买的 1 杯 8 盎司咖啡、100 毫克咖啡因,在这种时候喝醉了。我还想跟踪每个更新,以便以后查看每个更新。但是,我想要跟踪的其他项目可能具有完全不同的领域(例如书籍有标题并且可以根据享受程度进行排名)。
我希望能够对数据进行标记/分类,然后对这些数据运行查询/报告。例如,我可能想查看在某个时间范围内我在食物上花费了多少。这将查询带有食物标签的所有项目,根据他们都拥有的时间字段进行过滤,并总结所有这些项目的成本字段。
我在想我可以用一个非规范化的关系数据库来做到这一点,所有的项目更新都在一个表中。如果我在该表中内置了默认字段,例如我所说的那些,再加上一些额外的自定义字段的空格,我认为我可以进行相当快的查询。一个缺点是向项目添加新标签将涉及复制许多记录。如果有固定数量的标签列,则可以解决此问题,并且可以添加新标签,但这会限制项目具有的标签数量。
是否有更好的关系数据模型可以更好地平衡动态字段、快速查询和快速插入/修改?我想知道是否有一个非关系数据库平台也可以更好地工作。我查看了图形数据库并想知道这是否是一个好主意,因为它看起来更动态,但我不认为它会更快。
python - Converting Relational databases to flat and vice-versa
I'd like to write a script to convert from a relational database to a flat one and vice-versa. The database's rows mostly contain data from text input, but there are a few dropdown lists from the form that enter the primary IDs of a row from another table. Currently I have database rows that would look like say:
(1, 4, 2, 45.508582, -73.610102, 3) that I want turned into:
(1, Sherbrooke, "Park Frontenac", 45.508582, -73.610102, John, Doe) and this back to the above.
Some tables contain one column per primary ID (like city and park tables), but others have 2 or more (like the persons table).
What's the easiest way to write a script for this? I'm not comfortable with scripting outside of basic php, although I plan to start learning python soon.