Я использую Titan/DynamoDB library для использования AWS DynamoDB в качестве backend для моих графиков Titan DB. Мое приложение очень сильно загружено, и я заметил, что Titan чаще всего выполняет запросы запросов от DynamoDB. Я использую transaction- and instance-local caches и indexes, чтобы уменьшить количество читаемых модулей DynamoDB и общую задержку. Я хотел бы представить уровень кэша, который будет соответствовать всем моим EC2 экземплярам: кеш чтения/записи между DynamoDB и моим приложением для хранения результатов, вершин и ребер.Как добавить кеширование уровня хранилища между DynamoDB и Titan?
Я вижу два решения этого:
- неявного кэширование сделано непосредственно библиотека Titan/DynamoDB. Такие классы, как
ParallelScanner
could be changed, чтобы читать от AWS ElastiCache. Это изменение должно быть применено для чтения операций записи & для обеспечения согласованности. - Явное кэширование, выполненное приложением даже после вызова API Titan/Gremlin.
Первый вариант, по-видимому, более мелкозернистый, поперечный и общий.
- Что-то вроде этого уже существует? Может быть, для других хранилищ?
- Есть ли причина, по которой это уже не существует? Приложения графического DB кажутся очень читабельными, поэтому кэширование с несколькими экземплярами кажется довольно значительной функцией для ускорения запросов.
Предполагаете, вы пытались просто сделать кеши Титана намного больше? Какой вариант использования предполагает введение другого уровня косвенности и латентности? –
Это решает проблему только для одного экземпляра сервера Gremlin, а не для обеспечения согласованности кеша нескольких экземпляров. –
@Sebastian: Чтение из ElastiCache примерно в десять раз быстрее, чем чтение из DynamoDB. Мое приложение чрезвычайно читается тяжелым (читайте: скорость записи около 100: 1). Если данных в локальном кеше экземпляра Titan не существует, я хочу получить его из ElastiCache вместо DynamoDB. Уровень ElastiCache, который я предлагаю, относится ко всем экземплярам EC2/Titan. Если экземпляр A обновляет вершину, это приведет к аннулированию/обновлению записей ElastiCache. Последующие данные из экземпляра B, связанные с этой вершиной, будут обновлять кеш. – Ingo