Mirth - это движок интеграции, а его сила в обработке сообщений. Просмотр исторических сообщений иногда может быть затруднен или медленен, в зависимости от настроек хранилища для канала и от того, хотите ли вы извлекать дополнительную информацию во время обработки для хранения в полях «пользовательских метаданных». Пользовательские поля метаданных по умолчанию не индексируются, но вы можете добавить свои собственные (mirth поддерживает несколько внутренних баз данных, включая postgres, mysql, oracle и mssql.) Поиск содержимого сообщения в основном включает полнотекстовый поиск и сканирование , Параметры фильтра для сокращения времени сканирования, помимо созданных вами пользовательских метаданных, в основном связаны со свойствами сообщения (дата-время получения, состояние и т. Д.), А не с содержимым.
Итак, я бы не рекомендовал его для варианта использования, который вы предлагаете.
Тем не менее, Mirth определенно может быть использован для преобразования ваших сообщений (в пакетном режиме из файлов или в реальном времени) в xml, который может быть помещен в базу данных, предназначенную для обработки и запроса больших объемов xml документов. Я предполагаю, что когда вы говорите HL7, вы имеете в виду формат ER7 (с разделителями каналов) HL7v2. Mirth автоматически выполняет преобразование в xml для этих типов сообщений, поскольку они обрабатываются как xml во время обработки. Вы можете легко создать новый родительский узел, который будет содержать как преобразованный xml, так и исходную строку сообщения как дочерние.
Если выбранная вами база данных имеет драйвер JDBC, Java SDK или HTTP / REST API, mirth, вероятно, может напрямую вставить преобразованные сообщения для вас при обработке.
Обновление (12/2015): Для PHP 7.0 необходимо использовать random_int()
вместо mt_rand
, поскольку он обеспечивает "криптографически безопасные значения"
Лично, мне нравится использовать sha1(microtime(true).mt_rand(10000,90000))
, но Вы ищете больше настраиваемого подхода, так попробуйте эту функцию (который является модификацией к Вашему запросу этот ответ ):
function rand_char($length) {
$random = '';
for ($i = 0; $i < $length; $i++) {
$random .= chr(mt_rand(33, 126));
}
return $random;
}
однако, это, вероятно, будет значительно медленнее, чем uniqid (), md5 (), или sha1 ().
Редактирование: Похож на Вас, добрался до него сначала, извините.: Редактирование D
2: я решил сделать миленький тест на своей машине Debian с PHP 5, и eAccelerator (извините длинный код):
function rand_char($length) {
$random = '';
for ($i = 0; $i < $length; $i++) {
$random .= chr(mt_rand(33, 126));
}
return $random;
}
function rand_sha1($length) {
$max = ceil($length / 40);
$random = '';
for ($i = 0; $i < $max; $i ++) {
$random .= sha1(microtime(true).mt_rand(10000,90000));
}
return substr($random, 0, $length);
}
function rand_md5($length) {
$max = ceil($length / 32);
$random = '';
for ($i = 0; $i < $max; $i ++) {
$random .= md5(microtime(true).mt_rand(10000,90000));
}
return substr($random, 0, $length);
}
$a = microtime(true);
for ($x = 0; $x < 1000; $x++)
$temp = rand_char(1000);
echo "Rand:\t".(microtime(true) - $a)."\n";
$a = microtime(true);
for ($x = 0; $x < 1000; $x++)
$temp = rand_sha1(1000);
echo "SHA-1:\t".(microtime(true) - $a)."\n";
$a = microtime(true);
for ($x = 0; $x < 1000; $x++)
$temp = rand_md5(1000);
echo "MD5:\t".(microtime(true) - $a)."\n";
Результаты:
Rand: 2.09621596336
SHA-1: 0.611464977264
MD5: 0.618473052979
, Таким образом, мое предложение, если Вы хотите скорость (но не полный набор символов), состоит в том, чтобы придерживаться MD5, SHA-1 или Uniqid (который я не протестировал.. все же)
Можно все еще использовать uniqid (), просто сделать некоторую дополнительную обработку для расширения ее значения до количества символов, в которых Вы нуждаетесь.
, Например, для расширения его до 32 символов Вы могли сделать
$id = md5(uniqid());
, Чтобы развернуть его до 64 символов, просто добавить md5 md5, как так
$first = md5(uniqid());
$id = $first . md5($first);
Затем trucate по мере необходимости при необходимости в меньше, чем некоторые несколько из 32.
возможно, что Вы могли столкнуться с коллизиями, но это довольно маловероятно. Если Вы параноики об этом, просто используйте ту же идею, но пыхтение uniqid()
через симметричный шифр как AES вместо того, чтобы хешировать его.
, что вопрос представлял бы интерес для Вас?
я не уверен, почему uniqid()
не работает на Вас и в том, какой случай Вам нужно уникальное число в той же миллисекунде, но не обязательно иначе; что Вы генерируете настолько быстро, что в той же миллисекунде у Вас могла быть коллизия? Я задаюсь вопросом, сколько время делает uniqid()
, берет только для генерации его числа. Если Вы хотите, используйте параметр префикса эти uniqid()
функция с несколькими случайными буквами, и необходимо быть в безопасности.
, Если это для генерации файла, Вы могли бы хотеть посмотреть tmpfile()
или tempname()
.
В любом случае, в зависимости от того, чего Вы пытаетесь достигнуть, можно просто циклично выполнить и проверить, взят ли уникальный идентификатор уже (в массиве, с file_exists, и т.д.), и просто генерируйте другой, если он имеет место.
<час>кроме того, поскольку я не уверен, что понимаю Ваш вопрос точно, я указал бы на Вас на те другие вопросы, которые звучат довольно подобными, в то время как я получаю ваше различие:
первый будет представлять интерес, если Вы будете надеяться делать уникальный идентификатор, это человекочитаемо. Второй мог быть полезным, если Вы хотите играть со случайными числами и md5/sha1. Хотя, снова, я думаю uniqid()
, мог бы уже быть тем, что Вы ищете.