Как добавить пару миллионов документов в RavenDB - Embedded - PullRequest
1 голос
/ 23 марта 2012

Я установил последние встроенные двоичные файлы от NuGet и использую этот код для хранения документа 'product'.Через некоторое время процесс умирает с OutOfMemoryException.Хранение такого большого количества данных выходит за рамки Рэйвен?

Спасибо.Стивен

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; }
}

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Нет, RavenDB прекрасно справляется с таким количеством данных. Если вы не RunInMemory и EmbeddedDocumentStore , это почти то же самое, что и автономный сервер, только без издержек http и прямого доступа к базе данных с клиента.

Учитывая ваш код, вы хотите убедиться, что вы храните свои документы в пакетном режиме, например, 1024 за каждый сеанс. Еще одна вещь, которую вы хотите убедиться, это то, что ваш метод GetProducts () возвращает IEnumerable и возвращает элементы в надлежащем ETL-стиле.

2 голосов
/ 23 марта 2012

Какую большую партию ты делаешь?Похоже, что люди добились успеха с 256 размерами партии.Похоже, что гораздо больше причин приводит к тайм-аутам и исключениям памяти.

* РЕДАКТИРОВАТЬ: Похоже, что рекомендуется также создавать новый сеанс для пакета, чтобы не держать сеанс открытым слишком долго, что может вызвать ошибки тайм-аута.

...