Загрузка большого шифровального файла в Neo4J

Я знаю исходный вопрос, заданный о PHP 4.3, но сейчас прошло несколько лет, и я просто хотел отстаивать свой предпочтительный способ сделать это в PHP 5.3 или новее.

PHP 5.3+ сейчас включает поддержку анонимных функций (закрытий) , поэтому вы можете использовать некоторые стандартные методы функционального программирования, как в таких языках, как JavaScript и Ruby (с несколькими оговорками). Переписывание приведенного выше примера call_user_func в «стиле закрытия» будет выглядеть следующим образом:

$barber = function($type) {
    echo "You wanted a $type haircut, no problem\n";
};

$barber('mushroom');
$barber('shave');

Очевидно, это не так много покупает в этом примере - сила и гибкость приходят, когда вы передаете эти анонимные функции другим функциям (как в исходном вопросе). Поэтому вы можете сделать что-то вроде:

$barber_cost = function($quantity) {
    return $quantity * 15;
};

$candy_shop_cost = function($quantity) {
    return $quantity * 4.50;   // It's Moonstruck chocolate, ok?
};

function get_cost($cost_fn, $quantity) {
    return $cost_fn($quantity);
}

echo '3 haircuts cost $' . get_cost($barber_cost, 3) . "\n";
echo '6 candies cost $' . get_cost($candy_shop_cost, 6) . "\n";

Это может быть сделано с помощью call_user_func, конечно, но я считаю этот синтаксис более ясным, особенно после того, как будут задействованы пространства имен и переменные-члены.

Одно предостережение: я буду первым, кто признает, что я точно не знаю, что здесь происходит, но вы не можете всегда вызывать замыкание, содержащееся в членной или статической переменной и, возможно, в некоторых других случаях. Но переназначение его на локальную переменную позволит ему вызываться. Так, например, это даст вам ошибку:

$some_value = \SomeNamespace\SomeClass::$closure($arg1, $arg2);

Но это простое решение проблемы:

$the_closure = \SomeNamespace\SomeClass::$closure;
$some_value = $the_closure($arg1, $arg2);

0
задан tq343 16 January 2019 в 20:14
поделиться

2 ответа

Я закончил принимать его, используя cypher-shell. Это все еще медленно, но по крайней мере это заканчивается. Для его использования необходимо сначала открыть консоль Neo4J, а затем во второй командной строке использовать:

type <filepath>\data.cql | bin\cypher-shell.bat -a localhost -u <user> -p <password> --fail-at-end

Это работает для Windows 10, хотя и требует времени.

0
ответ дан tq343 16 January 2019 в 20:14
поделиться

Если целью вашего очень большого CQL-файла является простое получение данных, то выполнение его исключительно в Cypher будет очень медленным (и может даже вызвать ошибку нехватки памяти).

Если вы входите в новую базу данных neo4j, вам следует рассмотреть возможность рефакторинга данных из нее и использовать команду импорта инструмента neo4j-admin для эффективного приема данных.

Если вы входите в существующую БД, вы должны рассмотреть возможность рефакторинга данных и логики из файла CQL и использования LOAD CSV .

0
ответ дан cybersam 16 January 2019 в 20:14
поделиться
Другие вопросы по тегам:

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