我发现模型的RCS是一个有趣的问题,需要在数据持久化的环境中解决.它们是使用django ORM实现这种django-reversion和AuditTrail的几种解决方案,每种方法都提出了自己的方法.
这是我希望修改的模型(以django-model-like格式):
class Page(Model):
title = CharField()
content = TextField()
tags = ManyToMany(Tag)
authors = ManyToMany(Author)
Run Code Online (Sandbox Code Playgroud)
你会如何在你喜欢的db(Mongo,neo4j,CouchDb,GAE Datastore)中做到这一点?
请在每个帖子上仅发布一个RCS模型示例.
我不是要求一个完整的代码(也许解释是足够的?)但足以看到如何在每个数据库类型中解决这个问题.
sql persistence graph-databases key-value-store document-database
我正在使用Rails开发基于Web的应用程序.我正在讨论使用图形数据库(如InfoGrid)或文档数据库(如MongoDB).
我的应用程序需要存储一小组数据(如URL)和非常大的数据集(如虚拟机).此数据将绑定到单个用户.
我有兴趣了解人们使用Graph或Document数据库的经验以及为什么他们会使用其中任何一个选项.
谢谢
我有一个协调过程,由后台线程定期从外部Web服务检索对象ID列表,并尝试将缺少的实体添加到嵌入式RavenDb数据库.执行此过程的循环如下:
foreach (var pageId in listOfPageIds)
{
if ( _contentService.GetPageByPageId(pageId) == null)
{
_contentService.AddPage(pageId);
}
}
Run Code Online (Sandbox Code Playgroud)
的实施GetPageByPageId()和AddPage()如下:
public Page GetPageByPageId(string pageId)
{
using (var session = DocumentStore.OpenSession())
{
return session.Query<Page>().FirstOrDefault(page => page.PageId == pageId);
}
}
public bool AddPage(string pageId)
{
var page = GetPageByPageId(pageId);
if (page != null)
{
return false;
}
using (var session = DocumentStore.OpenSession())
{
var newPage = new Page() {PageId = pageId};
session.Store(newPage);
session.SaveChanges();
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
问题是如果列表有重复的id,一旦它添加第一个id并再次检查该id,结果将返回为空.就好像缺少一个可以注册新添加的实体的终结步骤.如果我稍后从另一个线程查询该集合,则返回具有该给定id的实体.任何人都可以看到这里的问题是什么?
谢谢,
鉴于文档数据库(如RavenDB)是非关系型的,您如何避免复制多个文档共有的数据?如果可以复制数据,你如何维护这些数据?
原来我正在正确存储文档所以这个问题的开头部分不正确,可能是由于我对RavenDB的经验不足.但是我仍然有一个问题,即在单元测试中使用EmbeddableDocumentStore时能够打开RavenDB Management Studio.
在使用NUnit进行单元测试期间,我似乎遇到了在EmbeddableDocumentStore中存储文档的问题.为了查看我是否实际存储文档,我正在尝试连接到嵌入式数据库.
当试图打开网址http:// computername:8080 /(由于某种原因,乌鸦数据库总是在我的电脑上使用计算机名称)浏览器加载栏只是旋转,如果我停止单元测试并再次尝试网址Chrome只是给出我无法连接的消息.这是上下文的一些代码.
[TestFixture]
public class Test2 : IDisposable
{
private EmbeddableDocumentStore _documentStore;
[SetUp]
public void SetUp()
{
if (_documentStore != null) return;
_documentStore = new EmbeddableDocumentStore
{
DataDirectory = "Data",
RunInMemory = true,
UseEmbeddedHttpServer = true
};
_documentStore.Configuration.AnonymousUserAccessMode = AnonymousUserAccessMode.All;
_documentStore.Initialize();
}
[Test]
public void Test()
{
var document = StaticData.getdocument();
using (var session = _documentStore.OpenSession())
{
session.Store(document);
session.SaveChanges();
}
using (var session = _documentStore.OpenSession())
{
var test = session.Load<ObjectType>().Length;
//This is …Run Code Online (Sandbox Code Playgroud) 我在Cosmos DB中有帐户收集。我尝试了不同的查询,但未能通过等效的SQL查询来仅提取已选择订阅的帐户。
我尝试了此查询但失败了
SELECT *
FROM account a
JOIN s IN c.subscriptions
WHERE s.id = "e5969a3c-2729-cb3c-a01b-2e62e0473646"
Run Code Online (Sandbox Code Playgroud)
帐户收款记录
[
{
"id": "8c549b95-480e-47f9-acd6-13339179399f",
"odoo_id": "UpdatedDAta",
"entity_name": "Lakes High School123",
"entity_type": "family | teacher | school | district",
"contacts": [
{
"name": "Mr. Garcia1",
"email": "Garcia@junk.com"
},
{
"name": "Mr. Garcia3",
"email": "Garcia@junk.com"
}
],
"subscriptions": [
{
"id": null,
"type": "group | profile",
"group_name": "Year 4",
"teachers": [
"Ms Jones"
],
"start_date": "25/7/2018",
"end_date": "24/7/2019",
"seats": 4,
"group_key": "red-limping-pigeon"
},
{
"id": …Run Code Online (Sandbox Code Playgroud) 这是商店里的一个文件:
{
"Name": "Hibernating Rhinos",
"Employees": [
{ "Name": "Ayende" },
{ "Name": "John" },
{ "Name": "Bob" },
{ "Name": "Tom" },
{ "Name": "Lane" },
{ "Name": "Bill" },
{ "Name": "Tad" }
]
}
Run Code Online (Sandbox Code Playgroud)
使用或不使用Employees集合可以轻松加载此文档,但如何只加载内部集合的一部分?例如,前5项:
{
"Name": "Hibernating Rhinos",
"Employees": [
{ "Name": "Ayende" },
{ "Name": "John" },
{ "Name": "Bob" },
{ "Name": "Tom" },
{ "Name": "Lane" }
]
}
Run Code Online (Sandbox Code Playgroud) 我需要在数据库中存储大约1亿条记录.其中约60-70%将每天删除,每天插入相同数量的记录.我觉得像Hbase这样的文档数据库,Big Table就适合这个.还有许多其他数据存储,如Cassandra,MongoDb等.哪种数据存储对这类问题有用,因为每天会有大量的读/写(数百万的订单).
我正在实现一个服务,每个用户必须拥有自己的json/document数据库.除了让用户通过示例查询json文档之外,数据库还必须支持涉及多个文档的ACID事务,因此我放弃使用Couch/Mongo或其他NoSQL数据库(不能使用RavenDB,因为它必须在Unix系统上运行).
考虑到这一点,我一直试图找到一种在SQL数据库之上实现它的方法.这是我到目前为止所提出的:
CREATE TABLE documents (
id INTEGER PRIMARY KEY,
doc TEXT
);
CREATE TABLE indexes (
id INTEGER PRIMARY KEY,
property TEXT,
value TEXT,
document_id INTEGER
)
Run Code Online (Sandbox Code Playgroud)
每个用户都有一个包含这两个表的数据库,用户必须声明他需要查询哪些字段,以便系统可以正确填充"索引"表.因此,如果用户"A"将其帐户配置为按"名称"和"年龄"启用查询,则每次用户插入具有"名称"或"年龄"属性的文档时,系统也会将记录插入"索引" table,'property'列包含name/age,'value'将包含属性值,'document_id'将指向相应的文档.
例如,假设用户插入以下文档:
'{"name" : "Foo", "age" 43}'
Run Code Online (Sandbox Code Playgroud)
这将导致对'documents'表的插入以及对'indexes'表的两次插入:
INSERT INTO documents (id,doc) VALUES (1, '{"name" : "Foo", "age" 43}');
INSERT INTO indexes (property, value, document_id) VALUES ('name', 'foo', 1);
INSERT INTO indexes (property, value, document_id) VALUES ('age', '43', 1);
Run Code Online (Sandbox Code Playgroud)
然后,假设用户'A'向服务发送了以下查询:
'{"name": "Foo", "age": 43}' //(the queries are also json documents).
Run Code Online (Sandbox Code Playgroud)
此查询将转换为以下SQL: …
在DocumentDb中,将数据分离以便将它们保存在单独的集合中的最佳方式和地点是什么?
到目前为止,大多数如何使用DocumentDb管理数据的例子都使用简单的对象,但在现实生活中,我们几乎没有.我只是想了解在将它们保存为DocumentDb中的Json对象之前,我需要如何以及在哪里处理我的复杂类.
我们来看下面的例子.我将把项目信息保存到Projects集合中,但我不想在项目文档中保存项目团队中人员的全名.我只想在项目文档中保存他们的EmployeeId.我有一个单独的Employees集合,我想保存个人/员工的具体信息.我的项目对象如下所示:
public class Project
{
[JsonProperty(PropertyName="id")]
public int ProjectId {get; set;}
[JsonProperty(PropertyName="projectName")]
public string ProjectName {get; set;}
[JsonProperty(PropertyName="projectType")]
public string ProjectType {get; set;}
[JsonProperty(PropertyName="projectTeam")]
public List<TeamMember> ProjectTeam {get; set}
}
Run Code Online (Sandbox Code Playgroud)
我的TeamMember类继承自Employee对象,如下所示:
public class TeamMember : Employee
{
[JsonProperty(PropertyName="position")]
public string Position {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我的Employee类看起来像这样:
public class Employee
{
[JsonProperty(PropertyName="id")]
public int EmployeeId {get; set;}
[JsonProperty(PropertyName="firstName")]
public string FirstName {get; set;}
[JsonProperty(PropertyName="lastName")]
public string LastName {get; set;}
[JsonProperty(PropertyName="gender")]
public string Gender {get; set;}
[JsonProperty(PropertyName="emailAddress")]
public string EmailAddress {get; …Run Code Online (Sandbox Code Playgroud)