Gremlin ReadOnly Поддержка транзакций - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь настроить транзакцию для клиента Gremlin, который не будет разрешать любые изменяющиеся запросы (только для чтения).

Мне известно, что это возможно в JanusGraph или Titan с их API (с buildTransaction () как readOnly ()), однако для TinkerPop или Neptune я не нашел ничего подобного.

IЯ использую клиент на основе сценария Java (сессия):

Cluster cluster = Cluster.open();
Client client = cluster.connect('SessionID');
String mutatingQuery = "g.addV('Test')";
client.submit("g.tx().open()");
client.submit(mutatingQuery); // This should fail.
client.submit("g.tx().commit()");

Я знаю, что вы можете ограничить эти типы запросов со стороны сервера.Но возможно ли это и со стороны клиента?Я также не уверен, что это правильный подход к этой проблеме.

Редактировать: я удаленно обмениваюсь данными с Gremlin Server через WebSocket, отправляя «скрипты».
Из Java я настраиваю кластерas:

Cluster cluster = 
    Cluster.build().addContactPoint(url).port(port).create();

И затем с помощью клиента для отправки запросов:

Client c= cluster.connect().init();
c.submit(query);

Я знаю о ReadOnlyStrategy, которую поддерживает Graph.Но я не нашел способ включить его с помощью вышеуказанного подхода, только из сценария конфигурации сервера.Есть ли другой способ ограничить отправленный «запрос»?

Мой сервер настроен с помощью этого скрипта groovy по умолчанию:

globals << [g : graph.traversal()] // Could have used readOnly strategy here.

И мой клиент отправляет запросы следующим образом:

c.submit("g.addV('test')"); // this should fail

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Существует несколько способов использования Neptune, в которых вы можете применить семантику стиля только для чтения для данного варианта использования.Можно было бы использовать стратегию TinkerPop ReadOnly.Другой вариант - разрешить пользователю / приложению доступ только к конечной точке чтения кластера, а не к конечной точке модуля записи.

Не могли бы вы немного подробнее рассказать о вашем конкретном случае использования?

ОБНОВЛЕНО: Вот пример создания ReadOnlyStrategy с использованием Java из клиентского приложения:

// Experiment with the ReadOnlyStrategy
    g2 = g.withStrategies(ReadOnlyStrategy.instance());
    try
    {
      g2.addV("shouldfail").iterate();
    }
    catch(Exception e)
    {
      System.out.println("Unable to add vertex as expected");
    }

Cheers, Kelvin

0 голосов
/ 19 октября 2018

Логика транзакций вручную с использованием .tx() в настоящее время не поддерживается в Нептуне.

Документы: https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html -> Транзакции

И, как упомянул Кельвин в своем ответе, вы можетевсегда заставляйте ваше приложение взаимодействовать с конечной точкой читателя кластера, что позволяет выполнять только операции только для чтения.Вы можете получить конечную точку считывателя, просмотрев сведения о кластере с консоли, или получить конечную точку программно с помощью Neptune SDK.

aws neptune describe-db-clusters --db-cluster-identifier \
    neptunedbcluster-t0wz5xpqmiuc --region us-east-1 --output table

---------------------------------------------------------------------------------------------------------------------------------
|                                                      DescribeDBClusters                                                       |
+-------------------------------------------------------------------------------------------------------------------------------+
||                                                         DBClusters                                                          ||
|+-----------------------------------+-----------------------------------------------------------------------------------------+|
||  AllocatedStorage                 |  1                                                                                      ||
||  BackupRetentionPeriod            |  1                                                                                      ||
||  ClusterCreateTime                |  2018-10-16T04:17:23.384Z                                                               ||
||  DBClusterArn                     |  arn:aws:rds:us-east-1:123123123123:cluster:neptunedbcluster-t0wz5xpqmiuc               ||
||  DBClusterIdentifier              |  neptunedbcluster-t0wz5xpqmiuc                                                          ||
||  DBClusterParameterGroup          |  neptunedbclusterparametergr-q6eekezcpd04                                               ||
||  DBSubnetGroup                    |  neptunedbsubnetgroup-dmcliosqke8b                                                      ||
||  DbClusterResourceId              |  cluster-AEFFOL3WFA7W5H7WL4QWEQWEQWE                                                     ||
||  EarliestRestorableTime           |  2018-10-21T07:04:17.379Z                                                               ||
||  Endpoint                         |  neptunedbcluster-t0wz5xpqmiuc.cluster-qweqweqwe.us-east-1.neptune.amazonaws.com     ||
||  Engine                           |  neptune                                                                                ||
||  EngineVersion                    |  1.0.1.0                                                                                ||
||  HostedZoneId                     |  ZUFXD4SLT2LS7                                                                          ||
||  IAMDatabaseAuthenticationEnabled |  False                                                                                  ||
||  LatestRestorableTime             |  2018-10-22T17:16:44.233Z                                                               ||
||  MasterUsername                   |  admin                                                                                  ||
||  MultiAZ                          |  False                                                                                  ||
||  Port                             |  8182                                                                                   ||
||  PreferredBackupWindow            |  06:52-07:22                                                                            ||
||  PreferredMaintenanceWindow       |  mon:09:33-mon:10:03                                                                    ||
||  ReaderEndpoint                   |  neptunedbcluster-t0wz5xpqmiuc.cluster-ro-qweqweqwe.us-east-1.neptune.amazonaws.com  ||
||  Status                           |  available                                                                              ||
||  StorageEncrypted                 |  False                                                                                  ||
|+-----------------------------------+-----------------------------------------------------------------------------------------+|
|||                                                      AssociatedRoles                                                      |||
||+----------+----------------------------------------------------------------------------------------------------------------+||
|||  RoleArn |  arn:aws:iam::393993383537:role/RDS-2-Neptune-Demo-NeptuneBa-NeptuneLoadFromS3Role-1NKBKFMRK6L1G               |||
|||  Status  |  ACTIVE                                                                                                        |||
||+----------+----------------------------------------------------------------------------------------------------------------+||
|||                                                     AvailabilityZones                                                     |||
||+---------------------------------------------------------------------------------------------------------------------------+||
|||  us-east-1b                                                                                                               |||
|||  us-east-1c                                                                                                               |||
|||  us-east-1a                                                                                                               |||
||+---------------------------------------------------------------------------------------------------------------------------+||
|||                                                     DBClusterMembers                                                      |||
||+------------------------------------------------------------+--------------------------------------------------------------+||
|||  DBClusterParameterGroupStatus                             |  in-sync                                                     |||
|||  DBInstanceIdentifier                                      |  neptunedbinstance-owqd0npl6ar4                              |||
|||  IsClusterWriter                                           |  True                                                        |||
|||  PromotionTier                                             |  1                                                           |||
||+------------------------------------------------------------+--------------------------------------------------------------+||
|||                                                     VpcSecurityGroups                                                     |||
||+-----------------------------------+---------------------------------------------------------------------------------------+||
|||              Status               |                                  VpcSecurityGroupId                                   |||
||+-----------------------------------+---------------------------------------------------------------------------------------+||
|||  active                           |  sg-01ab9e609e122c01b                                                                 |||
|||  active                           |  sg-0723b9b248cbe20a3                                                                 |||
||+-----------------------------------+---------------------------------------------------------------------------------------+||

Обратите внимание, что конечная точка считывателя доступна в результате как ReaderEndpoint.

ОБНОВЛЕНИЕ: Если у вас есть только один экземпляр в вашем кластере, то и конечные точки считывателя и устройства записи указывают натот же экземпляр.Если вы хотите действительно конечную точку только для чтения, вы должны создать кластер с несколькими экземплярами, и в этом случае конечная точка считывателя выполняет циклический перебор DNS между считывателями.

...