RavenDb 5+ 添加了对文档时间序列存储的支持。此支持中包括索引,尽管为了创建存储和索引性能优势,索引是按批次 TimeSeriesSegments 完成的。
RavenDb 支持计算这些 TimeSeries 上的基本 Count/Avg/Sum 总计。但是,我找不到计算移动的方法窗口内
例如,我可能有 50 天的值,每天一个值。使用内置的 Avg,我可以轻松地对所有 50 天的平均值进行索引。但是,我想创建一个索引字段,其中包含 5 天窗口内的移动平均值。因此,前 X-1 天的值将为空/空白,从该点开始将计算之前 X 天的平均值。
我无法在 RavenDb 的 map/reduce 索引策略中找到一种简单的方法来完成此任务,但我希望我错过了一些巧妙的方法(例如)从 Map 操作中运行查询以查询以前的值,即使它们可能不属于当前的 TimeSeriesSegment。
如果可能的话,我还希望能够更进一步并计算其中几个移动平均线的复合 - 例如,随时间变化的值的指数移动平均线。
这是索引的理想操作,因为数据写入后不会改变,但我不知道定义 RavenDb 索引时是否有窗口/游标样式支持。
我可以在类似 SQL 的存储中使用触发器等而不是 RavenDb 来实现此目的,但如果可能的话,我不希望将一些代码存储在存储过程中,而将一些代码存储在我的 C# 代码库中。
蒂亚!
我是 RavenDB 的新手,一直在尝试各种事情。
由于 RavenDB 是一个 (json) 文档数据库,为什么它没有简单的批量 JSON 导入选项?
Web GUI 具有各种数据导入选项,包括 csv,但没有 JSON。
我搜索了利用 REST API 批量加载包含 JSON 文档的文件的示例。这似乎是一个有效的选项,但导入格式要求将多个“PUT”插入到文件中,并且每个放入的文档必须已经指定了“ID”。如何对许多文档执行此操作?
在文档中给出的示例是:
curl -X POST "http://live-test.ravendb.net/databases/Example/bulk_docs"
-H "Content-Type: application/json"
-d "{
\"Commands\": [
{
\"Id\": \"person/1\",
\"ChangeVector\": null,
\"Document\": {
\"Name\": \"John Smith\"
},
\"Type\": \"PUT\"
},
{
\"Id\": \"person/1\",
\"ChangeVector\": null,
\"Patch\": {
\"Script\": \"this.Name = 'Jane Doe';\",
\"Values\": {}
},
\"Type\": \"PATCH\"
}
]
}"
Run Code Online (Sandbox Code Playgroud)
( [ https://ravendb.net/docs/article-page/5.1/csharp/client-api/rest-api/document-commands/batch-commands])1
当然有一种更简单的方法可以做到这一点。
我尝试将 JSON 文档转换为 csv 文件并导入该文件,但文件结构未正确导入回原始 JSON 文档格式。
另外,在上面的例子中,这些文档将被加载到哪个集合中?
如何将以下 SQL 查询转换为 RQL?
Select bike.* from Bike
inner join Appointment on Bike.BikeID = Appointment.BikeID and
Appointment.Status != 'Booked'
Run Code Online (Sandbox Code Playgroud)
然而,RavenDB 文档说:
重要的是要记住,load 子句不是连接;而是连接。它在查询运行之后、将临时结果发送到投影以获取最终结果之前应用。因此,它不能用于通过加载相关文档并过滤其属性来过滤查询结果。
那么在 RavenDB 中运行此类查询的正确方法是什么?
我正在尝试创建一个通用 C# 方法,该方法可以仅返回通用 BasicObject 类中特定文档类型的 Id 和说明(字符串)属性。(我的大多数文档类型都有 Id 和 Description 属性)。
该方法将接受文档类型和(大概)一个表达式,该表达式将作为参数传递给查询定义的 .Select 部分。该表达式会将文档类型转换为 BasicObject(Id 和 Description 属性)。
我尝试了下面的方法,但 RavenDB 不理解该表达式。是否可以执行我需要的操作,或者我是否必须为每种文档类型实现该方法。
public Task<List<T>> GetAllDocs(Expression<Func<T, BasicObject> convertExpression)
{
var query = _session.Query<T>
.Select(doc => convertExpression(doc));
var results = await query.ToListAsync();
return results;
}
Run Code Online (Sandbox Code Playgroud) 在 RavenDB 5.4+ 中,我想使用 Raven 的 Npgsql 内置工厂配置一个SQL ETL 任务,将数据卸载到 PostgreSQL 数据库。我遇到的问题是我希望将整个文档 ( this) 存储在jsonb数据列中。
问题:如何实现将整个文档(例如this下面的 ETL 转换示例中的)存储到 Postgres?
我的目标是不必Foo手动指定对象的字段/列。
Postgres 表示例:
create table public.foo
(
id text,
data jsonb
);
Run Code Online (Sandbox Code Playgroud)
RavenDB 中的 ETL 转换脚本示例:
loadToFoo ({
id: id(this),
data: this // <-- the issue
});
Run Code Online (Sandbox Code Playgroud)
这会导致异常:
Npgsql.PostgresException (0x80004005): 42804: 列“data”的类型为 jsonb,但表达式的类型为文本
我尝试过以下替代方案:
data: JSON.parse(this)
Error:
System.ArgumentException: Expected string but got Symbol
---
data: JSON.stringify(this)
Error:
Npgsql.PostgresException (0x80004005): 42804: column "data" …Run Code Online (Sandbox Code Playgroud) 我有一个Linq查询
var mdls = (from mdl in query dbSession.Query<MyModel>("MyIndex")
orderby mdl.Name
select dept).Skip(page.Value).Take(4);
Run Code Online (Sandbox Code Playgroud)
其中"MyIndex"是RavenDB中定义的简单索引.我知道在RavenDB中查询索引时会返回"TotalResults".看到这里
如何获得具有该TotalResult属性的查询结果?
我在ravendb set操作上阅读了这篇文章,但它没有告诉我如何通过C#更新一组文档.我想更新符合特定条件的所有文档的字段.换句话说,我想采用这种C#并使其更有效:
var session = db.GetSession();
foreach(var data in session.Query<Data>().Where(d => d.Color == "Red"))
{
data.Color = "Green";
session.Store(data);
}
session.SaveChanges();
Run Code Online (Sandbox Code Playgroud) 我在RavenDB文档中需要一个稍微复杂的索引
鉴于此文档定义如下:
public class PriceDocument
{
public string Id { get; set; }
public Guid PriceId { get; set; }
public decimal Price { get; set; }
public DateTime? PricingDate { get; set; }
public string Source { get; set; }
public int Version { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我需要获得给定的所有产品productId(我可以在查询时这样做),这些产品是PricingDate(最新的)和Source
所以给出以下数据:
var priceDocument = new PriceDocument {
Price = 1m,
Id = productId + "/1",
PricingDate = new DateTime(2011, 4, 1, 8, 0, 0),
PriceId …Run Code Online (Sandbox Code Playgroud) 我想确保我以正确的方式解决这个问题.我正在设计一个多租户应用程序.我计划在单个raven实例上为每个租户创建一个数据库,但是也希望有一个我的代码库的单个实例(即一个部署的mvc webapi实例).
因此,我将调用一些服务定位器来获取文档库的单例实例,然后将其传递给租户标识符,以便我可以针对相应的会话(每个租户数据库一个会话)进行操作.
如果每个租户数据库相对较小(在数十万个文档中),交易量相当低(每个租户数百个用户)..期望在单个服务器上运行多个租户是否现实?
我知道这是一个开放式的橘子对苹果的问题,但我正在寻找的答案要么是
a)是的,这是使用乌鸦进行多租户的标准方法,受硬件限制或b)你要去做错误,这将在少数租户之后失败,无论内存/计算能力如何
提前致谢
我开始玩RavenDB(到目前为止看起来真的很棒).但是我不得不尝试以下方法.
我存储了一个像这样的新文档
Product p = new Product() { Title = "My Fancy Product" };
RavenSession.Store(p);
Run Code Online (Sandbox Code Playgroud)
现在我想获得新存储文档的Id.谁能做到这一点?只是p.Id在商店似乎没有工作后访问...
提前致谢!
ravendb ×10
c# ×3
mapreduce ×2
bulkinsert ×1
indexing ×1
jint ×1
json ×1
linq ×1
multi-tenant ×1
npgsql ×1
pagination ×1
postgresql ×1
rest ×1
time-series ×1