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