标签: ravendb

是否可以在 RavenDb 5+ 中计算时间序列的移动平均线/EMA/窗口聚合?

RavenDb 5+ 添加了对文档时间序列存储的支持。此支持中包括索引,尽管为了创建存储和索引性能优势,索引是按批次 TimeSeriesSegments 完成的。

RavenDb 支持计算这些 TimeSeries 上的基本 Count/Avg/Sum 总计。但是,我找不到计算移动的方法窗口内

例如,我可能有 50 天的值,每天一个值。使用内置的 Avg,我可以轻松地对所有 50 天的平均值进行索引。但是,我想创建一个索引字段,其中包含 5 天窗口内的移动平均值。因此,前 X-1 天的值将为空/空白,从该点开始将计算之前 X 天的平均值。

我无法在 RavenDb 的 map/reduce 索引策略中找到一种简单的方法来完成此任务,但我希望我错过了一些巧妙的方法(例如)从 Map 操作中运行查询以查询以前的值,即使它们可能不属于当前的 TimeSeriesSegment。

如果可能的话,我还希望能够更进一步并计算其中几个移动平均线的复合 - 例如,随时间变化的值的指数移动平均线。

这是索引的理想操作,因为数据写入后不会改变,但我不知道定义 RavenDb 索引时是否有窗口/游标样式支持。

我可以在类似 SQL 的存储中使用触发器等而不是 RavenDb 来实现此目的,但如果可能的话,我不希望将一些代码存储在存储过程中,而将一些代码存储在我的 C# 代码库中。

蒂亚!

indexing mapreduce time-series moving-average ravendb

5
推荐指数
1
解决办法
437
查看次数

RavenDB批量加载Json文档

我是 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 文档格式。

另外,在上面的例子中,这些文档将被加载到哪个集合中?

rest json bulkinsert ravendb

5
推荐指数
0
解决办法
149
查看次数

按 RavenDB 中的相关文档过滤

如何将以下 SQL 查询转换为 RQL?

Select bike.* from Bike 
inner join Appointment on Bike.BikeID = Appointment.BikeID and
                          Appointment.Status != 'Booked'
Run Code Online (Sandbox Code Playgroud)

我知道在 Mongo 中可以通过相关文档进行过滤。

然而,RavenDB 文档说:

重要的是要记住,load 子句不是连接;而是连接。它在查询运行之后、将临时结果发送到投影以获取最终结果之前应用。因此,它不能用于通过加载相关文档并过滤其属性来过滤查询结果。

那么在 RavenDB 中运行此类查询的正确方法是什么?

ravendb

5
推荐指数
0
解决办法
225
查看次数

RavenDB (5.3) 返回任何文档类型的属性子集的通用 C# 方法

我正在尝试创建一个通用 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
推荐指数
0
解决办法
56
查看次数

RavenDB ETL 到 SQL,如何将整个文档('this')存储在 jsonb 列中?

在 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)

c# postgresql npgsql jint ravendb

5
推荐指数
1
解决办法
127
查看次数

RavenDB分页索引

我有一个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属性的查询结果?

linq pagination ravendb

4
推荐指数
1
解决办法
1269
查看次数

在RavenDB中设置操作

我在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)

c# ravendb

4
推荐指数
1
解决办法
523
查看次数

带有map的RavenDB索引减少了不同

我在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)

mapreduce ravendb

4
推荐指数
1
解决办法
1879
查看次数

RavenDB多租户:单个实例上会话数的实际上限是什么?

我想确保我以正确的方式解决这个问题.我正在设计一个多租户应用程序.我计划在单个raven实例上为每个租户创建一个数据库,但是也希望有一个我的代码库的单个实例(即一个部署的mvc webapi实例).

因此,我将调用一些服务定位器来获取文档库的单例实例,然后将其传递给租户标识符,以便我可以针对相应的会话(每个租户数据库一个会话)进行操作.

如果每个租户数据库相对较小(在数十万个文档中),交易量相当低(每个租户数百个用户)..期望在单个服务器上运行多个租户是否现实?

我知道这是一个开放式的橘子对苹果的问题,但我正在寻找的答案要么是
a)是的,这是使用乌鸦进行多租户的标准方法,受硬件限制或b)你要去做错误,这将在少数租户之后失败,无论内存/计算能力如何

提前致谢

multi-tenant ravendb

4
推荐指数
1
解决办法
304
查看次数

RavenDB获取新存储文件的ID

我开始玩RavenDB(到目前为止看起来真的很棒).但是我不得不尝试以下方法.

我存储了一个像这样的新文档

Product p = new Product() { Title = "My Fancy Product" };
RavenSession.Store(p);
Run Code Online (Sandbox Code Playgroud)

现在我想获得新存储文档的Id.谁能做到这一点?只是p.Id在商店似乎没有工作后访问...

提前致谢!

c# ravendb

4
推荐指数
1
解决办法
2097
查看次数