Giter VIP home page Giter VIP logo

Comments (6)

kloudwerkz avatar kloudwerkz commented on June 15, 2024 2

Hi Nick, I just got around to trying this and it works really well.
I did some reading up and MS indicate the DocumentClient should be used in the same way as an HttpClient. i.e. One instance of it per AppDomain. That was comforting so I implemented your suggestion and massively reduced the warmup time.

In case anyone has a similar issue to mine, I did this:

var docClient = new DocumentClient(new Uri(CosmosUri), CosmosKey, new ConnectionPolicy
            {
                ConnectionMode = ConnectionMode.Direct,
                ConnectionProtocol = Protocol.Tcp
            });
var client = new CosmonautClient(docClient);

and then called each CosmosStore as:
fooCosmosStore = new CosmosStore(client, CosmosDbName);

I get the 2-3 second lag on the first init of a CosmosStore but once the client is connected the rest of them are created in < 1 second each. That's way quicker than before.
I now have one DocumentClient per service/region so that seems like a good solution.

Thanks for your help!

from cosmonaut.

Elfocrash avatar Elfocrash commented on June 15, 2024

Hello and thank you for your kind worlds.

Cosmonaut will do some check in the beginning to make sure you database and collection exists and if not it will create them. This takes some time on initialisation but it can’t be shared across CosmosStores.

On top of that the DocumentClient internally will make a bunch of calls to get some stuff like a pkrange cache or a location cache. This is about 8 requests and 2-3 seconds.

There is not much I can do about the internal one and thats where the performance is noticeable. I am currently investigating the idea of sharing the DocumentClient across all CosmosStores instead of having one per CosmosStore. This would get rid of this issue but I don’t know what that would mean for performance.

However if you are registering as a singleton, you can just initialise your CosmosStores on the application startup and you shouldn’t notice this initial overhead because the app wouldn’t be running yet.

Does that make sense?

from cosmonaut.

kloudwerkz avatar kloudwerkz commented on June 15, 2024

Thanks, yep that makes sense. I do warm it up at startup but with 3 regions/services it takes about a minute. That's fine for a deploy but not so good for a scale-out action on Azure App Service as it's not available for 60 seconds right when you need it. Sharing the DocumentClient sounds like it would solve my issue. If you made it possible to do that as an option I'd be happy to test it :)

Thanks for the quick reply and keep up the great work!

from cosmonaut.

Elfocrash avatar Elfocrash commented on June 15, 2024

There is actually a way to do that yeah. Well kind of. You would have to create a DocumentClient object with your settings, then call the OpenAsync method to do all the initial calls, then use that document client to create a CosmonautClient and then use that to initialise your CosmosStores.

This should work, give it a try and let
me know.

from cosmonaut.

kloudwerkz avatar kloudwerkz commented on June 15, 2024

Cheers! I will give that a try and let you know how it goes.

from cosmonaut.

Elfocrash avatar Elfocrash commented on June 15, 2024

Closing this. Feel free to reopen if you need further help.

from cosmonaut.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.