我在我的node.js应用程序中使用mongoose,基本上有以下模型:
// Define Car model
CarSchema = new Schema({
brand : String,
type: String,
maxSpeed : Number
});
mongoose.model('Car', CarSchema);
// Define User model
UserSchema = new Schema({
lastname : String,
firstname : String,
cars : [CarSchema]
});
mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)
我是NoSQL的新手,我真的想尝试一下,但我首先需要研究这是否真的符合我的需求.
通过上述模型,我是否可以创建一个查询,列出所有在其私人汽车中拥有特定类型汽车的用户?
我目前正在试图弄清楚,Nosql数据库如何处理关系以及文档的唯一ID真正意味着什么.
也许我期待MongoDb过多,或者我还没有掌握NoSQL数据库中的关系概念.
基本上,以下测试失败,我想知道如何模拟用户和组之间的这种关系(这是1:0..N关系).
[TestFixture]
public class MongoDbExamples
{
private MongoServer _mongoServer;
[TestFixtureSetUp]
public void FixtureSetUp()
{
_mongoServer = MongoServer.Create();
}
[TestFixtureTearDown]
public void FixtureTearDown()
{
_mongoServer.Disconnect();
}
[Test]
public void RelationTest()
{
var database = _mongoServer.GetDatabase("StackoverflowExamples");
var p = new Person() { Name = "Testperson" };
var persons = database.GetCollection<Person>("Persons");
persons.Save<Person>(p);
var group = new Group() { Description = "A fancy descriptor" };
group.Add(p);
var groups = database.GetCollection<Group>("Groups");
groups.Save<Group>(group);
var readPerson = persons.FindOneById(p.Id);
readPerson.Name = "a different name";
// since …Run Code Online (Sandbox Code Playgroud) 我只是为当前项目评估一些noSQL解决方案.目前引起我注意的不同系统
最后一个在我的评价中更为搁置,因为他们写道
它仍然是一个新系统,它有粗糙的边缘,错误的错误信息,可能还有很多未捕获的错误.如果您找到其中一个,请告诉我们,以便我们解决.
我正在寻找一个稳定的解决方案.另一件事是我需要一个良好的Java支持.对于用Erlang编写的cloudDB,存在一些客户端库,ektorp似乎是最好的选择.这里的问题是,在某种程度上,在我看来,ektorp并没有如此大量使用.如果我查看下载部分是约.400次下载.好吧,大多数人都会通过maven依赖来使用它,但400仍然让我感到惊讶.关于couchDB Java库有一个旧的Stackoverflow问题,但这也推荐了ektorp.现在是更好的解决方案吗?
目前,Cassandra对我来说是最稳定和最成熟的选择,但cloudDB感觉如此简单和整洁,但它缺乏某种Java工具来访问它,或者编写自己的客户端来访问cloudDB是否有意义?
举例:
{
productName: 'Lost Series 67 DVD',
availableFrom: '19/May/2011',
availableTo: '19/Sep/2011'
}
Run Code Online (Sandbox Code Playgroud)
查看storeFront/currentAvailableProducts基本上检查当前日期时间是否在availableFrom - availableTo内并发出doc.
我想强制一个视图在每天凌晨1点重新生成,即处理/映射所有文档.
起初我有一个简单的python脚本通过crontab调度触及每个文档,因此导致新版本和视图更新,但是因为couchdb只是附加,这不是非常有效 - 即加载不必要的IO和磁盘空间使用后紧接着,在各方面都非常浪费资源.
第二个解决方案是通过couchapp push再次推送视图定义,但是这意味着视图在几分钟内不可用(或部分不可用),这也是不可接受的.
还有其他解决方案吗?
由于Riak使用水桶作为分离钥匙的方式,是否可以在水桶内装水桶?如果不是,那将如何为多个应用程序组织带有许多存储桶的Riak设置.
基本问题是如何在Riak中表示"数据库"和"表格".由于存储桶转换为表,转换为数据库的是什么?
编程语言中的命名空间通常具有层次结构.由于存储桶本质上是命名空间,因此Riak存储桶也允许层次结构是有意义的.
对于我正在开发的项目,我需要一个面向文档的数据库.我基本上有两件事我需要:完全ACID支持和引用的能力.可伸缩性不是主要问题,因为总用户数最多为300.
我知道MongoDB支持文档之间的引用,而CouchDB支持ACID但是我没有找到同时具有这两者的引用.
我真的试图避免在应用程序层中实现(ACID,References).显而易见的后备是RDBMS,其中一些树结构实现,我也试图避免.
有什么建议?
THANX
引用:http://gigaom.com/cloud/facebook-trapped-in-mysql-fate-worse-than-death/
已经有各种尝试来克服SQL的性能和可扩展性问题,包括几年前突然出现在场景中的值得关注的NoSQL运动.然而,很快发现虽然NoSQL可能更快并且扩展性更好,但它是以牺牲ACID一致性为代价的.
等等 - 我读错了吗?
这是否意味着如果我使用NoSQL,我们可以预期交易会被破坏(虽然我敢说它的百分比非常低)?
是否有任何开源图形数据库可以存储二进制数据,水平扩展和可选地提供存储数据的版本?
我被大量的dbs所震撼,但它们似乎都没有所有想要的功能.
我正在评估用于存储键/值对的nosql存储(对于应用程序的一部分),并且遇到了percona,它在mysql世界中提供本机键/值.这似乎是一个很好的解决方案,因为它允许存储保留在一个单独的位置(因为其余的功能存在于mysql中并且将继续保持原样).除了cassandra之外,还有其他关键/价值存储的其他优势吗?有什么缺点?
具体而言,是否存在数据丢失的风险?我正在考虑运行一个密集的事务处理系统,在这个系统中,任何事情都不会丢失.是否有任何关于在关键任务应用程序中使用NoSQL的例子,例如银行交易处理?