我正在创建一个以REST为中心的应用程序,它将为大多数特定于域的模型使用某种NoSQL数据存储.对于我打算围绕REST数据框架构建的主站点,我仍然希望将传统的关系数据库用于用户,计费信息以及域数据模型范围之外的其他元数据.
我被告知,如果我可以尽可能避免在同一请求上对RDBMS和NoSQL数据存储执行I/O,那么这种方法只是个好主意.
我的问题:
我知道在这个问题上提出了类似的问题,但我还没有看到任何完全包含我所有请求的人.
我首先要说的是我只有RDBMS的经验,所以如果我对NoSQL有任何错误,我很抱歉.
我正在创建一个包含大量审计日志(大约1TB)的数据库.
我用它来:
快速数据写入(大量审计日志一直写入)
搜索 - 搜索审计数据(由某个用户执行的搜索操作,在特定时间或某个操作...数据库应该支持非常快速地搜索任何'列')
分析和报告 - 生成每日,每周,每月的数据报告(它们是目前预定义的......如果它们更具动态性,是否会影响我应该选择的解决方案?)
可靠性(支持故障转移或任何类似功能),可扩展性(如果我增长到1TB以上,2TB,10TB或100TB - 任何解决方案都不能支持这么多数据吗?)当然还有性能(在使用中)我指定的案例)对我来说非常重要.
我知道RDBMS,这将是我开始的简单方法,但我真的担心,过了一段时间,数据库根本无法跟上节奏.
我的问题是我应该选择RDBMS或NoSQL解决方案,为什么?如果是NoSQL解决方案,因为它们是如此不同,你认为哪些适合我的需求?
虽然我正在为其中一个问题创建节点,但我陷入困境,经过文档后我意识到我无法找到节点的多值属性赋值
例如:节点1有属性网站访问,因为它不能是一个网站,如何添加属性到节点1"网站",这样它可以采取两个值,如www.abc.com www.def.com
node1["websites"] = "www.abc.com" "www.def.com"
Run Code Online (Sandbox Code Playgroud)
这样,在访问节点的每个属性时,可以单独访问节点属性中的每个网站.
谢谢你的时间 !
我正在考虑将MongoDB用于Web应用程序,但是我已经阅读到在某些情况下不建议使用它。我想知道我的项目会是其中一种情况。
这是我系统中实体的简要概述-
如您所见,有许多相互之间具有各种关系的实体。数据完整性很重要。这种类型的架构是否适合MongoDB?
我对Elasticsearch很新.我正在尝试编写一个将按字段分组并计算总和的查询.在SQL中,我的查询看起来像这样:
SELECT lane, SUM(routes) FROM lanes GROUP BY lane
我在ES中看到这样的数据:
{
"_index": "kpi",
"_type": "mroutes_by_lane",
"_id": "TUeWFEhnS9q1Ukb2QdZABg",
"_score": 1.0,
"_source": {
"warehouse_id": 107,
"date": "2013-04-08",
"lane": "M05",
"routes": 4047
}
},
{
"_index": "kpi",
"_type": "mroutes_by_lane",
"_id": "owVmGW9GT562_2Alfru2DA",
"_score": 1.0,
"_source": {
"warehouse_id": 107,
"date": "2013-04-08",
"lane": "M03",
"routes": 4065
}
},
{
"_index": "kpi",
"_type": "mroutes_by_lane",
"_id": "JY9xNDxqSsajw76oMC2gxA",
"_score": 1.0,
"_source": {
"warehouse_id": 107,
"date": "2013-04-08",
"lane": "M05",
"routes": 3056
}
},
{
"_index": "kpi",
"_type": "mroutes_by_lane",
"_id": "owVmGW9GT345_2Alfru2DB", …Run Code Online (Sandbox Code Playgroud) 我是mongodb的新手,所以因为mongodb不完整的文档而让我感到压力,因为我没有错误,所以我的所有尝试都无法正常工作,让我对发生的事情和调试内容感到困惑......
我只需更新符合特定条件的数据库上的多条记录,并为非现有记录创建新条目.我相信我可以使用update,upsert和multi进行单一数据库访问.这是我想出的:
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { options: { upsert: true, multi: true } } );
Run Code Online (Sandbox Code Playgroud)
我也尝试了多种组合甚至旧版本,例如:
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { upsert: true }, { multi: true } );
Run Code Online (Sandbox Code Playgroud)
它们都不起作用......
请帮助我这个如此微不足道的东西......我可以轻松地在sql中做到这一点,但是nosql thingy是如此限制我..谢谢!
编辑:
find上的相同查询完美无缺:
dbschema.Person.find( { person_id: { $in: ["734533604" ,"701084015"] } }, function ( err, results ) {
console.log( 'result: ' + results );
console.log( 'error: ' + …Run Code Online (Sandbox Code Playgroud) 我建议这应该是常见的情况之一,但可能在谷歌搜索时使用错误的关键字.
我只需要用完全随机的密钥创建新的表记录.假设我获得了具有良好随机性的密钥(几乎是随机的).但是,我不能100%确定没有行存在.所以我需要原子地做什么:
我在这个主题上找到的最有用的信息是关于HBase行锁的文章. 我认为HBase行锁是合适的解决方案,但我想在没有显式行锁定的情况下更好地做到这一点.
有人可以加一些有用的建议吗?优选的API是基于Java的,但实际上它更多的是概念而不是实现.
我们正在考虑在我们的Java服务器端应用程序中使用MongoDB作为我们的数据库.在我之前的项目中,我们使用Hibernate抽象底层SQL数据库,以便我们可以在不更改应用程序代码的情况下从MySQL切换到Postgres(例如).(这是Hibernate给我们提供的除了通常的ORM功能之外的一个+).
我为面向文档的NoSQL数据库搜索了一个类似的抽象层,结果没有结果!
虽然MongoDB满足了我们今天的要求,但如果一个更好的面向文档的NoSQL DB出现3年后,我们不想更改我们的应用程序代码以转移到新的数据库.
一个解决方案是我们自己编写抽象层(如果我们没有其他选项,我们就会这样做).
但是如果来自ORM世界的人们直接编码到NoSQL数据库接口上,我会感到惊讶吗?数据库独立性在NoSQL世界中不是一个问题吗?或者通过其他方式实现?
我没有处理像Amazon AWS DynamoDB这样的nosql数据库的经验.
我在Amazon AWS DynamoDB中存储了一些数据.
是否可以将数据从DynamoDB导出到MySQL服务器?如果是这样,如何实现呢?
谢谢,
我正在尝试为我的集合中的每个文档计算数组的每个值的平均聚合操作.
Document structure
{
myVar: myValue,
[...]
myCoordinates: [
myLng,
myLat
]
}
Run Code Online (Sandbox Code Playgroud)
因此,我试图通过查询集合来计算整个文档集合的myCoordinates数组的myLng和myLat值的平均值,如下所示:
myColl.aggregate([{
$group: {
_id: 0,
lngAvg: { $avg: "$myCoordinates.0" },
latAvg: { $avg: "$myCoordinates.1" }
}
}])
Run Code Online (Sandbox Code Playgroud)
但不幸的是,它不起作用,并为lngAvg和latAvg字段返回值0 .
你有什么想法吗?这至少可行吗?