Some examples for the following use cases would be very helpful for the end user of the client.
- Example on how to submit a query asynchronously (using the less known but useful g.V().promise() approach). This helps in answering the question, "How do I send the query asynchronously using bytecode?"
- Example of how to submit a query specifying per query options such as timeout or custom UUID. This helps in answering the question, "Can I set a per-query level timeout?"
- Example highlighting various use cases when you would need to change the values of maxSimultaneousUsage and maxInProcess parameters. This helps in answering the question, "How do I know what values shall I set for these parameters? How does it balance with maxConnectionPoolSize? How do I debug Timeout while obtaining a connection from the client code?"
- Example clarifying the materialization of properties in DetachedVertex (string based submission) vs ReferenceVertex (bytecode submission) scenarios. This helps in answering the question, "Is there any disadvantage in sending the queries as string? Which method is more efficient?"
- Example clarifying that the query actually gets sent to server when we call next(). This helps in answering the question, "When does the query get sent to the server? What role does batchSize play? How can I optimize my query to just retrieve one result out of many from the server?"
- Example clarifying that the Client object or the GraphTraversalSource object is thread safe and should be reused across multiple requests. This helps in answering the question, "Shall I create a separate client object per query or re-use one across multiple queries?"
- Example clarifying that the same GraphTraversal object cannot be re-used for sending multiple instances of the same query.