如何向RavenDB-Embedded添加数百万个文档

如何向RavenDB-Embedded添加数百万个文档,ravendb,Ravendb,我已经从NuGet安装了最新的嵌入式二进制文件,并且正在使用此代码存储“产品”poco。经过一段时间后,进程将终止,并出现OutOfMemoryException。存储这么多数据是否超出了Raven的范围 多谢各位。 斯蒂芬 var store=new embeddedabledocumentstore{DataDirectory=@“C:\temp\ravendata”,useebeddedHttpServer=true}; store.Initialize(); 使用(var session

我已经从NuGet安装了最新的嵌入式二进制文件,并且正在使用此代码存储“产品”poco。经过一段时间后,进程将终止,并出现OutOfMemoryException。存储这么多数据是否超出了Raven的范围

多谢各位。 斯蒂芬

var store=new embeddedabledocumentstore{DataDirectory=@“C:\temp\ravendata”,useebeddedHttpServer=true};
store.Initialize();
使用(var session=store.OpenSession())
{
foreach(Parsers.GetProducts().ToList()中的var项)
{
会话。存储(项目);
}
session.SaveChanges();
//var rdbList=session.Query().ToList();
}
[可序列化]
公共类产品
{
公共十进制ProductId{get;set;}
公共字符串ItemNum{get;set;}
公共字符串ProductName{get;set;}
公共字符串BrandName{get;set;}
公共字符串UOM{get;set;}
公共字符串{get;set;}
公共字符串CasePack{get;set;}
公共字符串PackageMarks{get;set;}
公共十进制价格{get;set;}
公共字符串供应商名称{get;set;}
公共字符串Url{get;set;}
public bool IsSpecialOrderItem{get;set;}
public bool IsSpecialPriceItem{get;set;}
公共布尔值IsRebateItem{get;set;}
公共bool istiredpricingitem{get;set;}
公共bool IsoflineSupplierItem{get;set;}
公共字符串目录{get;set;}
公共十进制CatalogId{get;set;}
公共十进制分类ID{get;set;}
公共十进制PriceGroupId{get;set;}
公共十进制OffineSupplierId{get;set;}
公共字符串ManufactureName{get;set;}
公共字符串ManufactureNum{get;set;}
公共字符串Upc{get;set;}
公共字符串信息{get;set;}
公共字符串INFO2{get;set;}
}

你的批量有多大?看起来人们在256个批量的情况下取得了成功。似乎更多的原因导致超时和内存异常


*编辑:听起来还建议为每个批创建一个新会话,以避免会话打开太长时间而导致超时错误。

您的批有多大?看起来人们在256个批量的情况下取得了成功。似乎更多的原因导致超时和内存异常


*编辑:听起来还建议每批创建一个新会话,以免会话打开太长时间而导致超时错误。

不,RavenDB可以处理这么多数据。除非您不在内存中运行,否则EmbeddedDocumentStore与独立服务器几乎相同,只是没有http开销和从客户端直接访问数据库


给定您的代码,您希望确保成批存储文档,例如每个会话1024个文档。您需要确保的另一件事是,GetProducts()方法返回一个IEnumerable,并以适当的ETL方式生成项。

不,RavenDB完全可以处理这么多的数据。除非您不在内存中运行,否则EmbeddedDocumentStore与独立服务器几乎相同,只是没有http开销和从客户端直接访问数据库


给定您的代码,您希望确保成批存储文档,例如每个会话1024个文档。您需要确保的另一件事是,GetProducts()方法返回IEnumerable,并以正确的ETL方式生成项。

Adam,没有批处理。。这可能是个问题。我会在文档中查找批次。。谢谢。亚当,你和丹尼尔都是对的(虽然有点冗长),所以我奖励你一个正确的答案。我能够从Demis ServiceStack Test Adam获取代码,没有批处理。。这可能是个问题。我会在文档中查找批次。。谢谢。亚当,你和丹尼尔都是对的(虽然有点冗长),所以我奖励你一个正确的答案。我能够从我正在阅读的Demis ServiceStack测试中获取代码,因为它现在与我添加到数据库中的文档相关。。谢谢,我正在阅读这篇文章,因为它现在与我添加到数据库中的文档有关。。非常感谢。
var store = new EmbeddableDocumentStore { DataDirectory = @"C:\temp\ravendata", UseEmbeddedHttpServer = true };
store.Initialize();

using (var session = store.OpenSession())
{
    foreach (var item in Parsers.GetProducts().ToList())
    {
        session.Store(item);

    }
    session.SaveChanges();
    //var rdbList = session.Query<Product>().ToList();
}


[Serializable]
public class Product
{
    public decimal ProductId { get; set; }

    public string ItemNum { get; set; }

    public string ProductName { get; set; }

    public string BrandName { get; set; }

    public string UOM { get; set; }

    public string AveWeight { get; set; }

    public string CasePack { get; set; }

    public string PackageRemarks { get; set; }

    public decimal Price { get; set; }

    public string SupplierName { get; set; }

    public string Url { get; set; }

    public bool IsSpecialOrderItem { get; set; }

    public bool IsSpecialPriceItem { get; set; }

    public bool IsRebateItem { get; set; }

    public bool IsTieredPricingItem { get; set; }

    public bool IsOfflineSupplierItem { get; set; }

    public string Catalog { get; set; }

    public decimal CatalogId { get; set; }

    public decimal CategoryId { get; set; }

    public decimal PriceGroupId { get; set; }

    public decimal OffineSupplierId { get; set; }

    public string ManufactureName { get; set; }

    public string ManufactureNum { get; set; }

    public string Upc { get; set; }

    public string Info { get; set; }

    public string INFO2 { get; set; }
}