我已经安装了NuGet的最新嵌入式二进制文件,并使用此代码存储“产品”poco。稍后,进程将以OutOfMemoryException终止。将这么多数据存储在Raven的范围之外吗?
谢谢。 斯蒂芬
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; }
}
答案 0 :(得分:2)
你做的批次有多大?看起来人们有256个批量大小的成功。似乎更多会导致超时和内存异常。
*编辑:听起来建议每批创建一个新会话,以免会话打开太长而导致超时错误。
答案 1 :(得分:2)
不,RavenDB对这么多数据来说非常好。除非您没有 RunInMemory ,否则 EmbeddedDocumentStore 与独立服务器几乎相同,只是没有http开销并且可以从客户端直接访问数据库。
鉴于您的代码,您希望确保批量存储文档,例如:每个会话1024。您要确保的另一件事是,您的GetProducts()方法返回一个IEnumerable,并以适当的ETL方式生成项目。