看看新的Azure宇宙数据库,我对它的多模型性质有点困惑.具体来说,这是否意味着:
a)可以同时以多种方式查询相同的底层数据库/存储,这样我就可以对同一个集合使用gremlin图形查询和mongodb api.
b)是否意味着您可以在配置Cosmos DB时选择不同的模型(图形,键值,列,文档),以及从那时起数据的存储方式.
这本小册子听起来像a),但是使用Azure仪表板创建一个cosmos实例,它看起来像b)因为你必须在创建时选择一个模型类型.
此外,文献提到了柱状数据,但我没有在创建时看到它的选项.
我是Azure DocumentDB的新手,我在尝试时遇到了问题.在第一次保存空集合时,我收到以下错误:
ResourceType文档是意外的.
ActivityId:29619975-e55a-4f31-a3d1-73d180ba3932
我的存储库代码(部分)如下:
public interface IEntity
{
string Id { get; set; }
DateTime DbCreatedAt { get; set; }
DateTime DbLastUpdatedAt { get; set; }
}
public class Repository<T>: IRepository<T> where T: class, IEntity
{
private DocumentClient _documentClient;
private string _databaseName;
private string _collectionName;
// ....
// ....
public Task SaveAsync(T entity)
{
var documentUri = UriFactory.CreateDocumentUri(_databaseName, _collectionName, entity.Id);
return _documentClient.UpsertDocumentAsync(documentUri, entity);
}
}
Run Code Online (Sandbox Code Playgroud)
这是第一次将任何内容写入此数据库/集合.难道我做错了什么?
文档DB中每个集合应该有一个实体吗?
考虑我在下图中有外键关系:

我应该为员工创建两个集合,为公司创建其他集合.或者我应该将它们存储在一个集合中?
我在这里读到,在documentdb中,存储过程触发器等的范围都在一个集合中.因此,通过将不同的实体拆分为单独的集合,我开箱即用.
因此,将这两个类转储为单个实体并不是更好:
{
"Id": 1001,
"Industry": "Software",
"Employees": [
{
"Id": 10011,
"Name": "John Doe",
"CompanyId": 1001
},
{
"Id": 10012,
"Name": "Jane Doe",
"CompanyId": 1001
}
]
}
Run Code Online (Sandbox Code Playgroud)
在DocumentDB中实现相关实体的标准做法是什么?
我编写了以下代码来从DocumentDB中获取记录
private static void QueryDocuments1(DocumentClient client)
{
IQueryable<SearchInput> queryable =
client.CreateDocumentQuery<SearchInput>(UriFactory.CreateDocumentCollectionUri(DocumentDBName, DocumentDBCollectionName))
.Where(x => x.Receiver == "8907180");
List<SearchInput> posts = queryable.ToList();
}
Run Code Online (Sandbox Code Playgroud)
并且它在代码行上显示以下错误 List<SearchInput> posts = queryable.ToList();
{"需要交叉分区查询但已禁用.请将x-ms-documentdb-query-enablecrosspartition设置为true,指定x-ms-documentdb-partitionkey,或修改查询以避免此异常.\ r \nActivityId:xxxxxx-xxxx -xxx-XXX-XXXXXXX"}
请帮帮我...
我正在学习微软的演练,学习如何使用 CosmosDb 为 azure 函数添加输入绑定,但是在调用该函数时,它不断返回内部服务器错误(500 http 代码)。
function.json 中 azure 函数的配置是:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"name": "bookmark",
"direction": "in",
"type": "cosmosDB",
"databaseName": "func-io-learn-db",
"collectionName": "Bookmarks",
"connectionStringSetting": "learn_DOCUMENTDB",
"id": "{id}",
"partitionKey": "{id}",
"sqlQuery": ""
}
]
}
Run Code Online (Sandbox Code Playgroud)
应用程序服务中有一个learn_DOCUMENTDB配置设置,它具有到 cosmos db 实例的有效连接字符串(自动创建)。
错误日志条目说:
无法将 CosmosDB 绑定到类型“System.String”。可能的原因:1) 尝试绑定到 'Microsoft.Azure.Documents.Client.DocumentClient, Microsoft.Azure.DocumentDB.Core, Version=2.9.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 但用户类型程序集是 …
我正在做一些基准测试,所以我有一个包含2500条记录的SQL数据库.我将这些记录插入到DocumentDB中.
我编写了两行代码,一行使用实体框架将所有2500插入到C#中的数组中.将所有2500从DocuementDB中拉入数组的下一行.
使用的代码:
var test= await Task<Test>.Run(() =>
client.CreateDocumentQuery<Test>(collection.DocumentsLink)
.ToList());
Run Code Online (Sandbox Code Playgroud)
DocumentDB示例耗时超过20秒.SQL Server系列几乎是即时的.对象是具有5个属性的简单DTO,我通过Internet进行SQL查询.
我误用了DocumentDB吗?我认为这是为了将你的所有记录都记录到内存然后加入linq.
我使用的是Mac,主要使用Node.js项目.我想尝试使用DocumentDB将它与MongoDB进行比较.无论如何都要运行Azure DocumentDB的本地实例而不必通过设置真实帐户的麻烦?
谢谢!
我目前面临来自Azure DocumentDB的响应时间非常慢(第一次尝试).
集合中有31个对象,我将要获取并返回给调用者.我使用的代码是这样的:
public async Task<List<dynamic>> Get(string collectionName = null)
{
// Lookup from Dictionary, takes literally no time
var collection = await GetCollectionAsync(collectionName);
var sw = Stopwatch.StartNew();
var query = await
_client.CreateDocumentQuery(collection.DocumentsLink,
new FeedOptions { MaxItemCount = 1000 })
.AsDocumentQuery()
.ExecuteNextAsync();
Trace.WriteLine($"Get documents: {sw.ElapsedMilliseconds} ms");
return query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
要实例化客户端,我使用以下代码:
_client = new DocumentClient(new Uri(endpoint), authKey, new ConnectionPolicy
{
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp
});
Run Code Online (Sandbox Code Playgroud)
我从中获取的响应时间Stopwatch在360ms到1200ms之间,以返回31个对象.对我来说,这很慢.没有自定义ConnectionPolicy ,平均响应时间约为950毫秒.
我在这里做错了吗?有可能以某种方式加快这些要求吗?
以下是Trace的输出,打印出秒表的经过时间:
Get documents: 1984 ms
Get …Run Code Online (Sandbox Code Playgroud) 正如标题所示,我需要以编程方式将100,000多条记录插入到DocumentDb集合中.这些数据将在稍后用于创建报告.我正在使用Azure Documents SDK和用于批量插入文档的存储过程(请参阅使用存储过程查询Azure documentdb批量插入).
以下控制台应用程序显示了我如何插入文档.
InsertDocuments生成500个测试文档以传递给存储过程.main函数调用InsertDocuments 10次,整体插入5,000个文档.运行此应用程序会导致每隔几秒钟插入500个文档.如果我增加每次通话的文件数量,我就会开始收到错误并丢失文件.
任何人都可以推荐更快的方式来插入文件?
static void Main(string[] args)
{
Console.WriteLine("Starting...");
MainAsync().Wait();
}
static async Task MainAsync()
{
int campaignId = 1001,
count = 500;
for (int i = 0; i < 10; i++)
{
await InsertDocuments(campaignId, (count * i) + 1, (count * i) + count);
}
}
static async Task InsertDocuments(int campaignId, int startId, int endId)
{
using (DocumentClient client = new DocumentClient(new Uri(documentDbUrl), documentDbKey))
{
List<dynamic> items = new List<dynamic>(); …Run Code Online (Sandbox Code Playgroud) 据我所知,CosmoDB能够使用Gremlin查询语言进行Graph查询.除此之外,定价,营销等都看起来都一样.他们提出了一个新产品来添加Gremlin似乎很奇怪,因为他们没有这样做来添加MongoDB支持.这两种产品之间有什么可辨别的差异?