Choosing a Virtual Instance

Virtual Instances come in two types - Dedicated and Shared.

Dedicated Virtual Instances

Dedicated Virtual Instances are isolated and meant for production use cases. Rockset offers the following Dedicated Virtual Instance sizes:

SizeIngest*
XSmall3 MiB/s
Small6 MiB/s
Medium12 MiB/s
Large24 MiB/s
XLarge48 MiB/s
2XLarge96 MiB/s
4XLarge192 MiB/s
8XLarge384 MiB/s
16XLarge768 MiB/s

A virtual instance will have double the compute and memory resources available with every size increase.

*Ingest represents the peak streaming ingest limit for insert-only workloads with record sizes of 1 KiB. Source and collection configurations such as average document size, ingest transformations, and clustering may lead to different observed throughputs.

Shared Virtual Instances

Shared Virtual Instances share a global resource pool with other accounts and are a cost-effective way to develop and prototype. Rockset offers the following Shared Virtual Instance sizes:

SizeIngest*
Free50 KiB/s
Nano150 KiB/s
Micro750 KiB/s
Milli1.5 MiB/s

*Ingest represents the peak streaming ingest limit for insert-only workloads with record sizes of 1 KiB. Source and collection configurations such as average document size, ingest transformations, and clustering may lead to different observed throughputs.

🚧

Ingest Warning

If your Virtual Instance cannot sustain the write rate, write requests may be rejected until the Virtual Instance can process the writes in a timely manner.

Virtual Instance Class

Virtual Instance Classes comprise varying underlying hardware profiles optimized for different use cases and allow you to choose the appropriate mix for your application. You can choose between different Virtual Instance Classes while keeping the same Virtual Instance Size.

💡

An instance class is only applicable for Dedicated Virtual Instances.

General Purpose Instance Class (currently in Beta) balances compute and memory resources and can be used for various use cases. It is ideal for ingest and query workloads with search characteristics, a moderate working set size, and queries that don’t require much memory to process.

Memory-optimized Instance Class provides double the amount of memory compared to the general purpose instance class for the same size virtual instance. It is ideal for queries that process large data sets or have a large working set size due to the mix of queries running on the VI.

When should you consider switching instance classes?

  • It is highly recommended not to switch from Memory-optimized to General-Purpose until your memory utilization is consistently below <60%
  • You are running on a General Purpose Instance Class and you observe frequent RESOURCE_EXHAUSTED errors related to memory with your queries. Switching to Memory Optimized can reduce or eliminate such errors
  • You are running on a Memory Optimized Instance Class and have low memory utilization (<60%) and moderate CPU utilization, where going to a smaller-sized Virtual Instance hurts your query performance. Switching to General Purpose for the same size Virtual Instance can reduce your cost while keeping your performance the same.
  • You are running a general-purpose ingest Virtual Instance and getting close to the collection limits, which coincide with higher memory utilization. Switching to Memory Optimized Instance Class will double your collection limits.

When should you consider going up or down a size?

  • When both CPU and Memory utilization are high or low, it’s less likely that switching an instance class will be the right course of action. When resource utilization is high, going up a size will most likely resolve any performance issues, and when resource utilization is low, going down a size will be the most cost-efficient way to maintain performance without being over-provisioned.
  • We recommend using auto-scaling to remove the need to adjust your VI size to peak and off-peak hours and optimize the performance while saving on cost.

What Impacts my Virtual Instance Performance?

Typically, the virtual instance size and class you'll require will depend on the following things:

  • data size: the size of the data you're querying
  • query complexity: the complexity of your query
  • query selectivity: how many documents are being scanned by your query
  • working set size: the data size of the mix of queries you run at any given time. If your working set fits in the cache, you’ll see improved performance.
  • query load: the number of concurrent queries
  • query latency: the query latency requirement of your application
  • streaming ingest load: the number and size of documents being processed, transformed, and indexed from the source. We recommend separating the ingest load from the query load on two different Virtual Instances for optimal performance.

There are different limits according to the types, classes, and sizes of Virtual Instances, which are listed here. You can choose a Virtual Instance size that meets your needs.