Try our conversational search powered by Generative AI!

Per Magne Skuseth
May 29, 2013
  8633
(8 votes)

EPiServer Find: Bulks, please!

Are you using Find and index lots of custom data? Improve performance by Indexing lists of objects, instead of one by one, as shown in the example below.

   1: // Not optimal 
   2: List<MyObject> objects = GetObjectsFromSomeWhere();
   3: foreach (var o in objects)
   4: {
   5:     client.Index(o);
   6: }
   1: // Better! (obviously)
   2: List<MyObject> objects = GetObjectsFromSomeWhere(); 
   3: client.Index(objects);

 

By doing this, you will significantly reduce the number of calls sent to the Find index, thus increase the general performance and decrease time taken to index.

This is fine as long as your list of objects isn’t too large, (depending on object size), but what if you have a list of 10 000 items? Or 100 000 items? Trying to index all of them at once will most likely result in a timeout error from the service. To solve this, you should split up the list and index the objects in bulks.  A simple way to do this is to create an extension method, like so:

   1: public static void IndexBulks(this IClient client, IEnumerable<object> objects, int bulkSize)
   2: {
   3:     while (objects.Any())
   4:     {
   5:         client.Index(objects.Take(bulkSize));
   6:         objects = objects.Skip(bulkSize);
   7:     }
   8: }

The extension accept a list of objects and a bulksize, and is used like this:

   1: client.IndexBulks(objects, 50);

Numbers
Indexing 1000 objects –  time taken:

  • One by one: 8 minutes, 13 seconds.
  • Bulks of 50: 4 minutes, 29 seconds. 
  • Single large bulk : As expected, the service timed out.

 

Happy indexing!

May 29, 2013

Comments

Marcus Granström
Marcus Granström May 30, 2013 10:25 AM

Very nice post Per Magne.

Thanks for sharing

Frederik Vig
Frederik Vig Oct 31, 2013 03:56 PM

Tip from Henrik Lindström: the more the better
as long as you keep below 50mb per request.

This is when calling the index method.

Henrik Fransas
Henrik Fransas Sep 27, 2018 08:46 AM

Thanks for this!

Please login to comment.
Latest blogs
New Security Improvement released for Optimizely CMS 11

A new security improvement has been released for Optimizely CMS 11. You should update now!

Tomas Hensrud Gulla | May 7, 2024 | Syndicated blog

Azure AI Language – Key Phrase Extraction in Optimizely CMS

In this article, I demonstrate how the key phrase extraction feature, offered by the Azure AI Language service, can be used to generate a list of k...

Anil Patel | May 7, 2024 | Syndicated blog

Webinar: Get Started with AI within Optimizely CMS

Join us for the webinar "Get Started with AI in Optimizely CMS" on Wednesday, May 8th. Don't forget to register!

Luc Gosso (MVP) | May 7, 2024 | Syndicated blog

Search & Navigation: Indexing job new features

From Episerver.Find version 16.1.0, we introduced some new features that make the indexing job in CMS more flexible and efficient: Support continuo...

Vinh Cao | May 7, 2024