Как не синхронизировать все карты между сервисами в Hazelcast

Используйте uasort для сортировки массива с пользовательской функцией и strtotime для анализа даты на метку времени.

$json = '
    {"info":[
        {"id":1, "title":"original title", "name":"john doe", "date":"2010-05-15"}, 
        {"id":2, "title":"another title", "name":"foo bar", "date":"2009-04-11"}
        ]
    }';

$arr = json_decode($json)->info;
uasort($arr, function($item1, $item2){
    return strtotime($item1->date) > strtotime($item2->date);
});

Выведет

Array
(
    [1] => stdClass Object
        (
            [id] => 2
            [title] => another title
            [name] => foo bar
            [date] => 2009-04-11
        )

    [0] => stdClass Object
        (
            [id] => 1
            [title] => original title
            [name] => john doe
            [date] => 2010-05-15
        )

)

1
задан Alexei Talankov 27 February 2019 в 16:08
поделиться

1 ответ

Все карты Hazelcast распределены по всем членам кластера. Таким образом, любой процесс, который имеет часть карты « chat », также имеет часть карты « session ».

Цель - равномерное распространение данных. В кластере с двумя узлами, если у Узла A была половина карты « chat » и все из « сеанса », а у Узла B была только другая половина «[ 114] chat «они будут иметь разную загрузку, поэтому не дают одинаковой производительности.

Так что прямо вы не можете сделать это.

Существует (коммерческая) опция безопасности, которая может ограничивать доступ к выбранным данным некоторыми приложениями, поэтому вы можете запретить приложению Gateway доступ к карте « chat ». Карта « chat » все еще будет там, распределенная по узлам.

Если вы действительно хотите, чтобы одна карта была одним узлом, а другая карта - двумя узлами, вам нужно два отдельных кластера, каждый с одной картой.

0
ответ дан Neil Stevenson 27 February 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: