По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Многомерные системы управления данными (МСУБД) объединяют несколько систем баз данных в одну. Вместо работы с несколькими моделями и поиска возможностей для их объединения, МСУБД предлагает общий механизм для различных типов данных. В данной статье приводится подробный обзор многомерных баз данных. Что такое многомерные базы данных? Многомерная база данных (Multi-Model Database) – это система управления, которая сочетает несколько типов БД в одну серверную систему. Большинство СУБД поддерживает одну модель БД, а в МСУБД можно хранить, запрашивать и индексировать данные из нескольких моделей. Важное преимущество многомерных БД заключается в многоязычной сохранности, когда не нужно искать способы для объединения различных моделей. Гибкий подход позволяет хранить данные разными способами. В результате вы получаете: Гибкое и динамичное программирование Снижение избыточности данных Например, изучать взаимосвязи между точками данных или создавать систему рекомендаций гораздо проще с помощью графовых БД, а реляционные БД лучше подходят для определения связи между столбцами данных. Ключевая функция МСУБД заключается в ее способности преобразовывать данные из одного формата в другой. К примеру, данные в формате JSON быстро преобразуются в XML. Преобразование форматов данных обеспечивает дополнительную гибкость и упрощает соответствие определенным требованиям проекта. Примеры использования МСУБД Варианты использования СУБД позволяют лучше понять принципы работы данной модели. Анализируя практические примеры, вам становится ясно, как несколько моделей работают в единой системе. Хранение и управление несколькими источниками данных Классическая IT-система использует различные источники данных. Информация не всегда хранится в том же формате или в той же базе данных. Несколько форматов складываются в сложную систему – трудную для поддержания и поиска данных. Хранение данных в МСУБД облегчает администрирование систем. Все находится в одной базе, поэтому на хранение и управление данными из разных источников тратится меньше времени. Расширение возможностей модели Многомерные базы данных предлагают расширения для моделей. Особенности одних моделей перекрывают недочеты других. Например, очень просто запрашивать данные в JSON-формате через SQL-запросы. Нет необходимости корректировать исходный источник данных. Расширяемость сокращает время обработки данных и устраняет необходимость в ETL-системах (извлечение, преобразование, загрузка). Гибридные среды данных Классическая среда данных разграничивает операционные данные от аналитических. Данные для анализа необходимо преобразовать и хранить отдельно от операционных. Происходит задвоение, и качество данных снижается. Разделенное пространство повышает затраты на техническое обслуживание. Всем базам данных необходимо администрирование и управление резервным копированием. Многомерная БД использует гибридный подход к хранению данных. Унифицированные узлы, в которых хранятся транзакционные данные и из которых извлекаются аналитические, намного проще поддерживать. Централизация данных У данных в организации есть определенные ограничения. Такие ограничения нужны, но они усложняют работу с информацией внутри компании. Многомерные БД хранят данные в формате as-is («как есть»), поэтому никакие преобразования не нужны. Централизация данных дает ценную информацию о существующих данных и предлагает возможности для создания новых вариантов использования. Поиск больших данных Hadoop отлично справляется с обработкой больших объемов данных в разных моделях. Основная причина – скорость получения, обработки и хранения данных. Единственное, чего не хватает Hadoop, – это эффективного механизма поиска. Если взять вычислительные мощности Hadoop и объединить их с возможностями поиска по многомерной БД, то получится функциональная система. Процесс работы становится масштабируемым и удобным для выполнения задач над большими данными. Плюсы и минусы многомерной базы данных В многомерных базах данных есть свои плюсы и минусы. В таблице ниже перечислены ключевые пункты: Плюсы Минусы Постоянство данных Сложность Динамичность Все еще в стадии разработки ACID-совместимость Не хватает методов моделирования Подходят для сложных проектов Не подходят для простых проектов Такая модель подходит для корпоративных настроек с множеством данных. Разные секторы пользуются данными для разных задач. Но детализированной и уже настроенной структуре многоязычной сохранности может не хватать возможностей многомерной системы. Плюсы Преимущества многомерных баз данных: согласованность данных между моделями за счет единой серверной системы динамичная среда с использованием различных типов данных на одной платформе отказоустойчивость, из-за ACID-совместимости подходят для сложных проектов с множественным представлением данных Минусы Недочеты многомерных баз данных: сложность МСУБД, из-за чего с ними трудно работать модель БД все еще развивается и не имеет окончательной формы ограниченная доступность различных методов моделирования не подходит для более простых проектов или систем Какие многомерные базы данных считаются самыми лучшими? На рынке представлено огромное множество многомерных типов БД. Их самой примечательной особенностью является поддержка нескольких моделей на одном сервере. Некоторые БД накладывают несколько моделей на сервер через компоненты. Но такие типы БД не считаются подлинными многомерными базами. Еще одно важное отличие – доступные методы моделирования. Этот аспект крайне важен для того, чтобы получать максимальную пользу от доступных данных. MarkLogic Server MarkLogic Server – это многомерная нереляционная база данных. Она появилась как хранилище XLM, а затем была доработана для хранения различных моделей: документной графовой текстовой пространственной типа «ключ – значение» реляционной Это универсальная, эффективная и безопасная база данных. Возможности сервера MarkLogic: Безопасность и управление. Интегрированное управление безопасностью данных и пользователей. ACID-совместимость. Обеспечивает строгую согласованность данных. Расширенный поиск. Доступ к данным обеспечивает встроенная поисковая система с семантическим поиском. Разноплановая аналитика. Вам доступны настраиваемые инструменты для аналитики и бизнес-аналитики. Встроенное машинное обучение. Интеллектуальное автоматизированное курирование данных с помощью встроенных алгоритмов машинного обучения обеспечивает более быстрый доступ к данным. Отказоустойчивость. Mark Logic предлагает высокую доступность и систему аварийного восстановления, помогающую избегать любого рода сбоев. Поддержка гибридного облака. База данных позволяет самостоятельно управлять развертыванием с помощью гибридных облачных решений. ArangoDB ArangoDB – это нативная многомерная система управления базами данных. Она поддерживает следующие форматы данных: документные графовые «ключ-значение» База данных извлекает и изменяет данные с помощью унифицированного языка запросов AQL. К другим важным особенностям относятся: Расширенные соединения. Позволяет соединять данные с помощью гибких запросов, что снижает их избыточность. Транзакции. Выполнение запросов к нескольким документам с доступной изоляцией и согласованностью транзакций. Сегментирование. Синхронная репликация путем сегментирования позволяет снижать внутреннюю кластерную связь, повышая при этом производительность и скорость соединения. Репликация. Репликация обеспечивает распределенную БД в пределах одного центра обработки данных. Многопоточность. Благодаря многопоточности, БД может использовать несколько ядер. OrientDB OrientDB – это многомерная нереляционная база данных с открытым кодом, написанная на Java. Эта БД поддерживает следующие модели: документную графовую тип «ключ-значение» объектную пространственную OrientDB первая ввела несколько моделей на уровне ядра. Эта база данных поставляется с рядом уникальных функций, к которым относятся: Поддержка SQL. БД поддерживает SQL-запросы, благодаря чему программистам легче переключиться с реляционных моделей на OrientDB. ACID-совместимость. База данных полностью транзакционна; таким способом достигается ее надежность. Распределенная. Полная поддержка репликации с множеством master на разных выделенных серверах. Портативная. Позволяет быстро импортировать реляционные базы данных. Заключение Существует великое множество методов моделирования баз данных, и в каждом решении можно найти свои плюсы и минусы. Многомерные БД стремятся объединить различные базы данных в единую серверную систему, благодаря чему при разрастании системы ее сложность и потребление ресурсов не увеличиваются.
img
Эта статья подробно объясняет функции и терминологию протокола RIP (административное расстояние, метрики маршрутизации, обновления, пассивный интерфейс и т.д.) с примерами. RIP - это протокол маршрутизации вектора расстояния. Он делится информацией о маршруте через локальную трансляцию каждые 30 секунд. Маршрутизаторы хранят в таблице маршрутизации только одну информацию о маршруте для одного пункта назначения. Маршрутизаторы используют значение AD и метрику для выбора маршрута. Первая часть статьи про базовые принципы работы протокола RIP доступна по ссылке. Административная дистанция В сложной сети может быть одновременно запущено несколько протоколов маршрутизации. Различные протоколы маршрутизации используют различные метрики для расчета наилучшего пути для назначения. В этом случае маршрутизатор может получать различную информацию о маршрутах для одной целевой сети. Маршрутизаторы используют значение AD для выбора наилучшего пути среди этих маршрутов. Более низкое значение объявления имеет большую надежность. Административная дистанция Протокол/Источник 0 Непосредственно подключенный интерфейс 0 или 1 Статическая маршрутизация 90 EIGRP 110 OSPF 120 RIP 255 Неизвестный источник Давайте разберемся в этом на простом примере: А маршрутизатор изучает два разных пути для сети 20.0.0.0/8 из RIP и OSPF. Какой из них он должен выбрать? Ответ на этот вопрос скрыт в приведенной выше таблице. Проверьте объявленную ценность обоих протоколов. Административное расстояние - это правдоподобие протоколов маршрутизации. Маршрутизаторы измеряют каждый источник маршрута в масштабе от 0 до 255. 0 - это лучший маршрут, а 255-худший маршрут. Маршрутизатор никогда не будет использовать маршрут, изученный этим (255) источником. В нашем вопросе у нас есть два протокола RIP и OSPF, и OSPF имеет меньшее значение AD, чем RIP. Таким образом, его маршрут будет выбран для таблицы маршрутизации. Метрики маршрутизации У нас может быть несколько линий связи до целевой сети. В этой ситуации маршрутизатор может изучить несколько маршрутов, формирующих один и тот же протокол маршрутизации. Например, в следующей сети у нас есть два маршрута между ПК-1 и ПК-2. Маршрут 1: ПК-1 [10.0.0.0/8] == Маршрутизатор OFF1 [S0/1 - 192.168.1.254] = = Маршрутизатор OFF3 [S0/1-192.168.1.253] = = ПК-2 [20.0.0.0/8] Маршрут 2: ПК-1 [10.0.0.0/8] == Маршрутизатор OFF1 [S0/0 - 192.168.1.249] == Маршрутизатор OFF2 [S0/0 - 192.168.1.250] == Маршрутизатор OFF2 [S0/1 - 192.168.1.246] == Маршрутизатор OFF3 [S0/0 - 192.168.1.245] == ПК-2 [20.0.0.0/8] В этой ситуации маршрутизатор использует метрику для выбора наилучшего пути. Метрика - это измерение, которое используется для выбора наилучшего пути из нескольких путей, изученных протоколом маршрутизации. RIP использует счетчик прыжков в качестве метрики для определения наилучшего пути. Прыжки - это количество устройств уровня 3, которые пакет пересек до достижения пункта назначения. RIP (Routing Information Protocol) - это протокол маршрутизации вектора расстояния. Он использует расстояние [накопленное значение метрики] и направление [вектор], чтобы найти и выбрать лучший путь для целевой сети. Мы объяснили этот процесс с помощью примера в нашей первой части этой статьи. Хорошо, теперь поймите концепцию метрики; скажите мне, какой маршрут будет использовать OFF1, чтобы достичь сети 20.0.0.0/8? Если он выбирает маршрут S0/1 [192.168.1.245/30], он должен пересечь устройство 3 уровня. Если он выбирает маршрут S0/0 [19.168.1.254/30], то ему придется пересечь два устройства уровня 3 [маршрутизатор OFF! и последний маршрутизатор OFF3], чтобы достичь целевой сети. Таким образом, он будет использовать первый маршрут, чтобы достигнуть сети 20.0.0.0/8. Маршрутизация по слухам Иногда RIP также известен как маршрутизация по протоколу слухов. Потому что он изучает информацию о маршрутизации от непосредственно подключенных соседей и предполагает, что эти соседи могли изучить информацию у своих соседей. Обновления объявлений RIP периодически транслирует информацию о маршрутизации со всех своих портов. Он использует локальную трансляцию с IP-адресом назначения 255.255.255.255. Во время вещания ему все равно, кто слушает эти передачи или нет. Он не использует никакого механизма для проверки слушателя. RIP предполагает, что, если какой-либо сосед пропустил какое-либо обновление, он узнает об этом из следующего обновления или от любого другого соседа. Пассивный интерфейс По умолчанию RIP транслирует со всех интерфейсов. RIP позволяет нам контролировать это поведение. Мы можем настроить, какой интерфейс должен отправлять широковещательную передачу RIP, а какой нет. Как только мы пометим любой интерфейс как пассивный, RIP перестанет отправлять обновления из этого интерфейса. Расщепление горизонта Split horizon-это механизм, который утверждает, что, если маршрутизатор получает обновление для маршрута на любом интерфейсе, он не будет передавать ту же информацию о маршруте обратно маршрутизатору-отправителю на том же порту. Разделенный горизонт используется для того, чтобы избежать циклов маршрутизации. Чтобы понять эту функцию более четко, давайте рассмотрим пример. Следующая сеть использует протокол RIP. OFF1-это объявление сети 10.0.0.0/8. OFF2 получает эту информацию по порту S0/0. Как только OFF2 узнает о сети 10.0.0.0/8, он включит ее в свое следующее обновление маршрутизации. Без разделения горизонта он будет объявлять эту информацию о маршруте обратно в OFF1 на порту S0/0. Ну а OFF1 не будет помещать этот маршрут в таблицу маршрутизации, потому что он имеет более высокое значение расстояния. Но в то же время он не будет игнорировать это обновление. Он будет предполагать, что OFF1 знает отдельный маршрут для достижения сети 10.0.0.0/8, но этот маршрут имеет более высокое значение расстояния, чем маршрут, который я знаю. Поэтому я не буду использовать этот маршрут для достижения 10.0.0.0/8, пока мой маршрут работает. Но я могу воспользоваться этим маршрутом, если мой маршрут будет недоступен. Так что это может сработать как запасной маршрут для меня. Это предположение создает серьезную сетевую проблему. Например, что произойдет, если интерфейс F0/1 OFF1 выйдет из строя? OFF1 имеет прямое соединение с 10.0.0.0/8, поэтому он сразу же узнает об этом изменении. В этой ситуации, если OFF1 получает пакет для 10.0.0.0/8, вместо того чтобы отбросить этот пакет, он переадресует его из S0/0 в OFF2. Потому что OFF1 думает, что у OFF2 есть альтернативный маршрут для достижения 10.0.0.0/8. OFF2 вернет этот пакет обратно в OFF1. Потому что OFF2 думает, что у OFF1 есть маршрут для достижения 10.0.0.0/8. Это создаст сетевой цикл, в котором фактический маршрут будет отключен, но OFF1 думает, что у OFF2 есть маршрут для назначения, в то время как OFF2 думает, что у OFF1 есть способ добраться до места назначения. Таким образом, этот пакет будет бесконечно блуждать между OFF1 и OFF2. Чтобы предотвратить эту проблему, RIP использует механизм подсчета прыжков (маршрутизаторов). Количество прыжков RIP подсчитывает каждый переход (маршрутизатор), который пакет пересек, чтобы добраться до места назначения. Он ограничивает количество прыжков до 15. RIP использует TTL пакета для отслеживания количества переходов. Для каждого прыжка RIP уменьшает значение TTL на 1. Если это значение достигает 0, то пакет будет отброшен. Это решение только предотвращает попадание пакета в петлю. Это не решает проблему цикла маршрутизации. Split horizon решает эту проблему. Если расщепление горизонта включено, маршрутизатор никогда не будет вещать тот же маршрут обратно к отправителю. В нашей сети OFF2 узнал информацию о сети 10.0.0.0/8 от OFF1 на S0/0, поэтому он никогда не будет транслировать информацию о сети 10.0.0.0/8 обратно в OFF1 на S0/0. Это решает нашу проблему. Если интерфейс F0/1 OFF1 не работает, и OFF1, и OFF2 поймут, что нет никакого альтернативного маршрута для достижения в сети 10.0.0.0/8. Маршрут отравления Маршрут отравления работает противоположном режиме расщепления горизонта. Когда маршрутизатор замечает, что какой-либо из его непосредственно подключенных маршрутов вышел из строя, он отравляет этот маршрут. По умолчанию пакет может путешествовать только 15 прыжков RIP. Любой маршрут за пределами 15 прыжков является недопустимым маршрутом для RIP. В маршруте, находящимся в неисправном состоянии, RIP присваивает значение выше 15 к конкретному маршруту. Эта процедура известна как маршрутное отравление. Отравленный маршрут будет транслироваться со всех активных интерфейсов. Принимающий сосед будет игнорировать правило разделения горизонта, передавая тот же отравленный маршрут обратно отправителю. Этот процесс гарантирует, что каждый маршрутизатор обновит информацию об отравленном маршруте. Таймеры RIP Для лучшей оптимизации сети RIP использует четыре типа таймеров. Таймер удержания (Hold down timer) - RIP использует удерживающий таймер, чтобы дать маршрутизаторам достаточно времени для распространения отравленной информации о маршруте в сети. Когда маршрутизатор получает отравленный маршрут, он замораживает этот маршрут в своей таблице маршрутизации на период таймера удержания. В течение этого периода маршрутизатор не будет использовать этот маршрут для маршрутизации. Период удержания будет прерван только в том случае, если маршрутизатор получит обновление с той же или лучшей информацией для маршрута. Значение таймера удержания по умолчанию составляет 180 секунд. Route Invalid Timer - этот таймер используется для отслеживания обнаруженных маршрутов. Если маршрутизатор не получит обновление для маршрута в течение 180 секунд, он отметит этот маршрут как недопустимый маршрут и передаст обновление всем соседям, сообщив им, что маршрут недействителен. Route Flush Timer - этот таймер используется для установки интервала для маршрута, который становится недействительным, и его удаления из таблицы маршрутизации. Перед удалением недопустимого маршрута из таблицы маршрутизации он должен обновить соседние маршрутизаторы о недопустимом маршруте. Этот таймер дает достаточно времени для обновления соседей, прежде чем недопустимый маршрут будет удален из таблицы маршрутизации. Таймер Route Flush Timer по умолчанию установлен на 240 секунд. Update Timer -В RIP широковещательная маршрутизация обновляется каждые 30 секунд. Он будет делать это постоянно, независимо от того, изменяется ли что-то в маршрутной информации или нет. По истечении 30 секунд маршрутизатор, работающий под управлением RIP, будет транслировать свою информацию о маршрутизации со всех своих интерфейсов. RIP - это самый старый протокол вектора расстояний. Для удовлетворения текущих требований к сети он был обновлен с помощью RIPv2. RIPv2 также является протоколом вектора расстояния с максимальным количеством прыжков 15. Вы все еще можете использовать RIPv1, но это не рекомендуется. В следующей таблице перечислены ключевые различия между RIPv1 и RIPv2. Основные различия между RIPv1 и RIPv2 RIPv1 RIPv2 Он использует широковещательную передачу для обновления маршрутизации. Он использует многоадресную рассылку для обновления маршрутизации. Он посылает широковещательный пакет по адресу назначения 255.255.255.255. Он отправляет многоадресную рассылку по адресу назначения 224.0.0.9. Он не поддерживает VLSM. Он поддерживает VLSM. Он не поддерживает никакой аутентификации. Он поддерживает аутентификацию MD5 Он поддерживает только классовую маршрутизацию. Он поддерживает как классовую, так и бесклассовую маршрутизацию. Он не поддерживает непрерывную сеть. Он поддерживает непрерывную сеть.
img
Бизнес процессы в CRM – системе Битрикс24 позволяют упростить жизнь рядовым сотрудникам, автоматизируя различные сферы деятельности. В статье мы хотим рассказать о цикличном бизнес процессе, который будет запускать до тех пор, пока сделка находится в статусе «Дожатие» Сценарий Предположим, мы сконвертировали лида в сделку, выставили предложение и ждем реакции от клиента. В таком случае, с клиентом необходимо периодически связываться, уточняя, как у него обстоят дела, не решился ли он на покупку нашей услуги/товара. Чтобы ответственный менеджер не забыл про нашего клиента, мы хотим чтобы ему периодически (раз в три дня) приходили напоминания на почту о том, что данная сделка все еще находится на этапе «Дожатие» и с клиентом необходимо связаться. Это плоский, и весьма тривиальный бизнес процесс, но надо заметить, весьма эффективный. Как только менеджер сменит статус сделки на любой другой, или сконвертирует ее, сообщения приходить перестанут. Битрикс24 бесплатно! Реализация Переходим к настройке бизнес процессов. В разделе CRM → Настройки → Автоматизация → Бизнес-процессы и нажимаем Добавить шаблон: Во вкладке «Основное» даем название для бизнес – процесса, даем небольшое описание и снимаем галочки с параметров автоматического запуска, как показано ниже: Нажимаем «Сохранить». Переносим в рабочее поле необходимые элементы. В разделе «Конструкции», переносим элемент «Цикл». Нажатием на значок шестеренки этого элемента производим следующие настройки: Заголовок - название для элемента Тип условия - установите «Поле документа» Поле документа - указываем «Стадия сделки» Условие - выставляем «Равно» Значение - этап сделки под название «Дожатие» Условно говоря, наш цикл, будет выполняться до тех пор, пока статус сделки будет равен «Дожатие». Как только он будет изменен, бизнес процесс будет закончен. Добавляем элементы «Почтовое сообщение» и «Уведомление пользователя» из раздела «Уведомления» последовательно в цикле. В настройках почтового уведомления производим следующие настройки: Заголовок - название элемента внутри бизнес – процесса. Носит локальный характер Отправитель сообщения - с какого email адреса будет отправлено письмо. Получатель сообщения - адрес электронной почты адресата сообщения. В нашем случае, указана переменная {=Document:ASSIGNED_BY_EMAIL}, в которой хранится адрес электронной почты ответственного по данной сделке. Тема сообщения - тема электронного письма Текст сообщения - сообщение, которое будет отправлено адресату. Можно (и нужно) использовать переменные. Тип сообщения - типа может быть либо текстовый, либо html. В последнем случае, вы можете применять оформление письма с помощью html кода. Рекомендуем табличную верстку, как в случае с email рассылкой Помимо почтового уведомления, мы настроим отправку сообщения внутри Битрикс24. Переходим к опция настройки элемента «Уведомление пользователя»: Заголовок - так же имеет локальное значение внутри бизнес процесса Отправитель уведомления - пользователь, от которого поступит сообщение. В нашем случае это руководитель отдела продаж. Получатель уведомления - переменная, в которой хранится ответственный по сделке. Текст уведомления для сайта - сообщение, которое получит юзер внутри Битрикс24 Тип уведомления - мы выбираем персонализированное уведомление от руководителя отдела продаж. Чтобы неповадно было :) Как было сказано в начале статье, уведомления мы хотим посылать один раз в три дня. Находим раздел элементов «Прочее» и добавляем элемент «Пауза в выполнении». Производим его настройку, она тривиальна: Готово. Мы сделали простенький бизнес – процесс для отработки конкретного статуса. На финальном этапе он выглядит вот так: Сохраняем. Теперь нам необходимо создать служебный бизнес – процесс, который будет отслеживать изменение статусов. Как и ранее, в разделе «Сделка» нажимаем «Добавить шаблон»: Все настройки идентичны предыдущим, за исключение параметров автоматического запуска. Здесь мы выставляем галочку «При изменении». Производим настройку элементов бизнес – процесса. В разделе «Конструкции» добавляем элемент «Условие». По умолчанию, данный блок имеет два ответвления. Выбираем любое, и переходим к его настройке: Заголовок - локальное значение. Для наглядности мы назвали его согласно статусу – «Дожатие» Тип условия - выставляем «Поле документа» Поле документа - проверять будем стадию сделки Условия - равняется ли заданное поле нашему значению. Выставляем «Равно». Значение - тут выставляем «Дожатие» Следом за этим блоком добавляем из раздела «Обработка документа» элемент «Запуск бизнес-процесса» со следующими параметрами: Заголовок - любое удобное наименование ID документа - ID документа и указание сущности. Так как мы работаем со сделками, то указываем префикс DEAL_ Сущность - указываем «Сделка» Тип документа - укажите «Сделка» Шаблон - выберите бизнес – процесс, который необходимо запустить. В нашем случае это созданный БП «Дожатие» Для запуска бизнес-процесса изнутри бизнес-процесса используйте префикс CONTACT_, COMPANY_, DEAL_, LEAD_. Во второй ветке условия настройка тривиальна: В результате мы имеем следующую картину: Сохраняем и закрываем. Готово. Теперь, когда наш менеджер переведет сделку в статус «Дожатие», ему раз в три дня будет приходить напоминания о том, что данная сделка нуждается в его внимании. Как только сделка будет сконвертирована или переведена в иной статус, уведомления прекратятся.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59