我花了几个小时阅读文档和论坛,试图找到解决以下问题的方法:
在 A Mongo 数据库中,我有一个包含一些非结构化数据的集合:
{“数据”:“一些数据”,“_id”:“497ce96f395f2f052a494fd4”}
{“more_data”:“更多数据”,“recursive_data”:{“some_data”:“更多数据”,“_id”:“497ce96f395f2f052a4323”}
{“more_unknown_data”:“字符串甚至字典”,“_id”:“497ce96f395f2f052a494fsd2”}
...
问题是这个集合中的元素没有预定义的结构,它们可以是无限的级别。
我的目标是创建一个查询,搜索整个集合并找到与正则表达式匹配的所有元素(在键和值中)。
例如,如果我有一个正则表达式: '^even more' - 它应该返回结构中某处具有字符串“甚至更多”的所有元素。在这种情况下 - 这将是第二个。
可能的重复:
是否有任何符合 ACID 的 NoSQL?
所以,我听说 NoSQL 数据库不符合 ACID,这是为什么?
所以为了设置这个,我有一个公司,我们有用户和一组标签来描述这些用户。每个用户最多可以附加 5000 个标签。
我们有一个引擎,允许客户选择某些标签来制作标签组。引擎具有 AND/Or 功能和 Include/Exclude。客户可以创建一个标签组,我们的引擎会找到满足标签组中指定的逻辑要求的用户总数。基本上这只是交集、联合和排除,所以 redis 集已经很完美了。
为了处理这个问题,我将数据存储为这样。Tag1:[user1, user2,user3] Tag2:[user1, user5, user6] 等等
从这里开始,所有 bool 逻辑都是使用脚本完成的。
然而,我们的客户群正在迅速扩大。几年之内,我们要么需要几个 64GB 的 redis 服务器,要么需要一个替代方案。
这是我的问题。是否有任何闪电般快速的数据库选项用于执行基于磁盘的交集和并集?我尝试过 Postgres,但性能不可接受。例如,对 500k 用户集的集比较需要 1 秒。在 Postgres 中,我看到大约 30 秒,如果标签组中有很多标签,时间会更长。
我已经推荐了 DynamoDB 和其他一些,但只是想在我深入挖掘之前获得一些受过教育的意见。
谢谢,丹
我对 MongoDB 完全陌生,我对如何构建数据感到困惑。我需要做的是存储一组可以通过不同键检索的对象。例如,我有对象“CustomerInfo”,它可以被键“Customer1”、“Customer_1”、“Cust.1”、“Customer 1”等引用。
在 RDMBS 中,我将创建一个单独的表来存储别名,并有一行用于客户信息数据。然后我会加入他们,使用我从客户那里得到的任何别名,并获取数据。这看起来简单明了,但到目前为止,我无法超越创建一个空数据库。在这种情况下,我在 RDBMS 方面的经验似乎更像是一种障碍而不是一种资产,因为我倾向于“考虑关系”并且它(显然)不适用于 NoSQL 数据库。
欢迎任何建议,提前感谢所有答案。
我需要有关存储统计数据的最佳方法的建议。Django 上有一个项目,它有一个数据库(mysql),里面有 30 000 个网络游戏。
每场比赛都有三个统计参数:
现在我需要每天存储这三个参数的历史数据,所以我想创建一个包含五列的单个数据库:
gameid, number of views, plays, likes, date (day-month-year data).
Run Code Online (Sandbox Code Playgroud)
所以最后,每一场比赛的每一天都会被记录在一行中,所以一天后这张表将有 30000 行,10 天后它将有 300000 行,一年后它将有 10 950 000 行. 我不是 DBA 方面的大专家,但这告诉我,这很快就会成为一个性能问题。我不是在谈论 5 年后会发生什么。简单图形需要此表中收集的数据
(daily, weekly, monthly, custom range).
Run Code Online (Sandbox Code Playgroud)
也许您对如何存储这些数据有更好的想法?也许 noSQL 在这种情况下会更合适?真的需要你的建议。d
是否可以将一个集合的项目的值指向另一个集合的项目?
例子:
db.col2.save( { value: 'test' } );
db.col1.save( { title: 'testing, something: [code to point to another collection's item] } );
db.col1.find().toArray()
[
{
"_id" : ObjectId([someobjectidhere]),
"title" : "testing",
"something": {
"value": "test"
}
}
]
Run Code Online (Sandbox Code Playgroud) 嗨,我对同一主题有点困惑.例如在我的场景中.如果我有一个用户表和另一个表的订单.我在nosql数据库中下了订单,那么我应该如何在订单表中维护用户信息.
提前致谢
我试图更好地理解在卡桑德拉的sstables的不变性.非常清楚当插入操作或memtable中存在数据时的更新/删除操作中会发生什么.但是,当我想要修改已经被刷新的数据时,不清楚会发生什么.
所以我理解简单的senario:我执行insert opertaion并将数据写入memtable.当记忆已满时,它会被冲到一个稳定的状态.
现在,如何进行数据修改?执行删除或更新命令时(当数据被刷新时)会发生什么?如果sstable是不可变的,那么数据将如何被删除/更新?memtable如何在删除和更新命令(由于它已被刷新而不存在于其中的数据)中起作用?记忆包含什么?
说我有NoSQL结构如下:
messages
chat_id (known)
message_id (generated automatically)
{author, timestamp, content}
Run Code Online (Sandbox Code Playgroud)
我也有users/分支,我可以看到两个用户的最后登录.
我想通过1个查询获取给定用户的未读消息数.
你会如何实现这样的任务?
我在使用Cassandra建模数据时遇到问题.我想将它用作活动商店.我的事件有创建时间戳.这些事件属于由id标识的分区.
现在,我想查看每个id的最新事件,然后根据时间戳过滤此ID.
所以我有这样的事情:
ID | CREATION_TIMESTAMP | CONTENT
---+---------------------------------+----------------
1 | 2018-11-09 12:15:45.841000+0000 | {SOME_CONTENT}
1 | 2018-11-09 12:15:55.654656+0000 | {SOME_CONTENT}
2 | 2018-11-09 12:15:35.982354+0000 | {SOME_CONTENT}
2 | 2018-11-09 12:35:25.321655+0000 | {SOME_CONTENT}
2 | 2018-11-09 13:15:15.068498+0000 | {SOME_CONTENT}
Run Code Online (Sandbox Code Playgroud)
我尝试按分区ID分组并查询最大值,creation_timestamp但这是不允许的,我应该使用EQ或IN指定分区ID.额外的阅读让我相信这是解决这个问题的完全错误的方法,但我不知道NoSQL是不适合这项工作的工具还是我只是从错误的角度处理这个问题?