在使用NoSQL时,是否存在任何SQL注入等效项或其他漏洞?
我在Python2.7中使用Google App Engine数据库,并注意到Google没有太多关于数据存储安全性的文档.
任何帮助,将不胜感激!
python security google-app-engine nosql google-cloud-datastore
在此处接受答案的示例:
对于博客系统,“帖子应该是一个集合。帖子作者可以是一个单独的集合,或者,如果只有一个电子邮件地址,则可以是帖子中的一个字段。注释应该嵌入到帖子中以提高性能。”
如果是这种情况,是否意味着我的应用每次显示博客帖子时,都会加载对该帖子进行过的每条评论?如果有3,729条评论怎么办?这不会破坏数据库连接,SQL或NoSQL吗?还有一种明显的情况,当我加载博客文章时,我最初只想显示前10条评论。
我有这些猫鼬模式:
var Thread = new Schema({
title: String, messages: [Message]
});
var Message = new Schema({
date_added: Date, author: String, text: String
});
Run Code Online (Sandbox Code Playgroud)
如何使用最新的Message子文档(限制1)返回所有线程?
目前,我正在Thread.find()服务器端过滤结果,但我想在aggregate()性能问题上使用MongoDb中的此操作.
我的问题是根据每个文档的属性及其子代的属性从C#中选择RavenDB文档.假设我们有以下文件:
objekts/1:
{
"Code": "1",
"Children": [
{
"Role": "A",
"Place": "Here"
},
{
"Role": "B",
"Place": "There"
}
]
}
objekts/2:
{
"Code": "1",
"Children": [
{
"Role": "A",
"Place": "There"
},
{
"Role": "B",
"Place": "Here"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何在C#中制定查询以选择具有Code =="1"的对象,并且至少有一个具有Role =="A"且Place =="There"的子项?查询应解析为objekts/2.
另外,我如何制定一个我可以查询的相应Raven索引?
public class Child
{
public string Role { get; set; }
public string Place { get; set; }
}
public class Objekt
{
public string Code { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 我试图从给定相当简单结构的文档中删除一些数据部分,这将比项目更加深入和重要:
{
id: "...",
name: "...",
phone: "...",
data: {
key1: "val1",
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我知道除了用更新的树替换整个树之外,没有办法更新/删除嵌套部分中的部分.
例如,如果我想从文档数据中删除key1,我需要使用它的副本更新文档数据部分,其中不包含key1
document.update({data: new dict without key1})
Run Code Online (Sandbox Code Playgroud)
是否有任何eaiser方法从类似文档的名称字段的根目录中删除部分 - 而不使用不包含名称键和值的自身副本更新整个文档?每次需要删除部分数据时,是否必须深度复制和过滤文档?
假设有10个设备(dev01,dev02,dev03..etc).
它以一定的间隔时间发送数据,我们收集这些数据,因此我们的数据模式是
dev01 :int
signalname :string
signaltime :date/time[with YY-MM-DD HHMMSS.mm]
Extradata :String
Run Code Online (Sandbox Code Playgroud)
我想将数据推送到cassandra,哪种方式最好存储这些数据?
我的查询就像,
1需要检索基于设备的当前日期数据,还是某个日期范围?
2 5设备当天数据?
我不确定将数据存储到cassadra中的以下方法是最佳模型
Standard columnfamily Name:signalname
row key :dev01
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
columnname :timeseries(20120801124205)[YYMMDD HHMMSS][next second data]
columnvalue :Json data
row key :dev02
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
columnname :timeseries(20120801124205)[YYMMDD HHMMSS][next second data]
columnvalue :Json data
Or
Super columnfamily :signalname
row key :Clientid1
supercolumnname :dev01
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
supercolumnname :dev02
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
row key …Run Code Online (Sandbox Code Playgroud) 以下是Redis简介的示例:
$ redis-cli rpush messages "Hello how are you?"
OK
$ redis-cli rpush messages "Fine thanks. I'm having fun with Redis"
OK
$ redis-cli rpush messages "I should look into this NOSQL thing ASAP"
OK
$ redis-cli lrange messages 0 2
1. Hello how are you?
2. Fine thanks. I'm having fun with Redis
3. I should look into this NOSQL thing ASAP
Run Code Online (Sandbox Code Playgroud)
下面他们写下面的内容:
您可以从上面的示例中猜出,可以使用列表来实现聊天系统.
我的问题是:他们真正的意思是什么to implement a chat system?
例如,聊天中的消息至少有三个参数:
1)消息的文本,
2)消息的作者,
3)写入消息的时间.
在上面的代码示例中,我只看到一个参数:消息的文本.
那么如何使用列表来实现聊天系统呢?他们在哪里存储其他两个参数以及如何将它们连接到Redis列表中的消息? …
目前,我正在尝试更新已排序的集合成员。查看文档,使用ZADD似乎可以更新成员(如果其分数已经存在)。但是,使用此代码尝试更新成员时,
db.zadd("users", parseInt(key, 10) + 1, JSON.stringify(newData));
Run Code Online (Sandbox Code Playgroud)
....即使分数已经存在,也会添加一个新条目!如何使用Redis更新排序的集合成员?
在听说NoSQL几年后,我终于开始在.Net MVC应用程序(简单博客)中使用RavenDB.启动并运行嵌入式数据库非常快速且轻松.
但是,我发现在将对象插入文档存储区后,当后续页面刷新时,它们并不总是存在.当我刷新页面时,它们会显示出来.我在某处读到这是由于陈旧的索引.
我的问题是,你应该如何在一直有插件发生的网站上使用它(例如:电子商务).这不会导致陈旧的索引和不可靠的查询结果吗?
我们最近从关系(MySQL)转向NoSQL(couchbase).基本上它是社交手机游戏的后端.我们在扩展后端以处理越来越多的用户时遇到了很多问题.当使用MySQL加载时,由于多个表之间存在大量连接,因此用户花费了大量时间.在加载数据后,我们看到了一个巨大的改进,特别是在加载数据时,因为大多数数据保存在单个文档中.
在缺点方面,就查询而言,couchbase似乎也有很多限制.Couchbase替代SQL查询是视图.虽然我们设法使用map-reduce处理大多数查询,但我们真的很难弄清楚如何处理基于时间的查询.例如,我们需要根据timestamp属性过滤用户.如果时间少于当前时间,我们只需要一个用户:
if(user.time < new Date().getTime() / 1000)
Run Code Online (Sandbox Code Playgroud)
会发生的情况是,一旦将用户的时间设置为某个未来的时间,它就会被豁免于此视图,这是期望的行为,但除非我们更新它,否则它永远不会被添加回视图 - 文档仅在其视图中被重新编入索引时更新.
我们现在的解决方案是加载前x个用户文档,然后在我们的应用程序中检查时间.对user.time属性进行排序,以便我们获得那些时间小于或接近当前时间的用户.但我不确定这是否真的会在实时环境中起作用.理想情况下,我们希望在应用程序级别避免这些类型的检查.
当我们需要检查多个基于时间的属性时,也有时候例如匹配.我们当前的策略在这种情况下不起作用,并且我们经常从视图中获取在应用程序中完成时未通过这些检查的文档.如果已经解决类似问题的人可以分享他们的经验,我将非常感激.提前致谢.
更新:
我们尝试使用仅适用于一个密钥的范围查询.就像我在大多数情况下所说的那样,我们有多个基于时间的键意味着多个范围不起作用.