2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
IOP202 DevCon 2012 Apache Lucene in Windows Azure
1. Интеграция Apache Lucene
в Windows Azure // DevCon•12
ВАДИМ НОВИЦКИЙ
Вице-президент по разработке в проекте
AtContent.com, IFFace Inc.
@vadinov | ifface.com
3. AtContent - это
Новый
Легальное
подход к Автоматиза Управление копирование
публикации ция контентом проще и
и разделения из одного выгоднее
дистрибуции дохода места нелегального
Платежная Аналитика Оплата
Управление
система и разделением автору
внутри статистика дохода напрямую
7. Apache Lucene - это
Библиотека для полнотекстового поиска
Высокопроизводительная
Написана на Java
С открытым исходным кодом
Кроссплатформенная
Портирована на многие языки программирования, включая C#
8. Apache Lucene в AtContent
Индексирование публикаций
Индексирование профилей
пользователей
Поиск по публикациям и профилям
пользователей
11. Добавление в индекс
SearchTicket Ticket = Item.GetSearchTicket();
DeleteDocument(Ticket.Id);
string Language = DefinitionLanguage(Ticket.Language);
Analyzer Analyzer = new SnowballAnalyzer(Language);
var Writer = new IndexWriter(Directory, Analyzer);
AddDocument(Writer, Ticket);
Writer.Optimize();
Writer.Commit();
Writer.Close();
16. Производительность
Синтетический тест на 1 000 000 записей
Заполнение индекса — около 250 секунд
Поиск частоупотребимого слова — 8-25 мс. (50 потоков,
478 325 совпадений)
Поиск редкоупотребимого слова — ≈0-5 мс. (50 потоков,
283 совпадения)
Конкурентный поиск не увеличивает время обработки запроса
Размер индекса — 20-30% от исходного контента
17. Сделать свой Яндекс?
Не получится
Отсутствие поддержки морфологии
Терабайты индексов нужно где-то хранить
Отличия между поисковым движком и поисковой системой
18. Альтернативы
Bing API
5 000 запросов в сутки бесплатно
Поиск по веб, картинкам, новостям, видео
Не решает проблему поиска внутри сервиса
Sphinx
Потребует дополнительного MySQL-сервера
Более сложная интеграция
НЕ масштабируется
20. Фабрика контекстов
Создание контекстов
для работы с Table
Storage, Blob Storage и
Queue
21. Фабрика контекстов
Создание контекста для Table Storage
//было
var StorageAccount = RoleEnvironment.IsEmulated ?
CloudStorageAccount.FromConfigurationSetting(
"EmulatedConnectionString") :
CloudStorageAccount.FromConfigurationSetting(
"ConnectionString");
var Context = new TableServiceContext(
StorageAccount.TableEndpoint.ToString(),
StorageAccount.Credentials);
//стало
var Context = CPlase.Azure.GetContext();
22. Утилиты для Blob
Работа с хранилищем,
чтение папок, удаление
папок, сериализация в
блобы
23. Утилиты для Blob
Сохранение данных в блоб
//было
try
{
var BlobClient = Azure.GetBlobClient();
var BlobRef = BlobClient.GetBlobReference(BlobUrl);
BlobRef.UploadText(Content);
}
catch { }
//стало
CPlase.BlobUtils.SaveBlob(BlobUrl, Content);
24. Работа с кешем на экземпляре
Создание кеша,
управление кешем,
синхронизация кеша
между инстанциями
25. Сохранение на экземляре
//было
var Storage = RoleEnvironment.GetLocalResource(LocalResourceName);
var FinalPath = GetPath(Storage, Path);
try
{
string DirectoryPath = System.IO.Path.GetDirectoryName(FinalPath);
if (!Directory.Exists(DirectoryPath))
Directory.CreateDirectory(DirectoryPath);
File.WriteAllText(FinalPath, Content);
}
catch () {}
//стало
CPlase.InstanceStorage.Save(LocalResourceName, Path, Content);
26. Утилиты для работы с Queue
Создание очередей,
управление
сообщениями в
очередях
27. Работа с Queue
Добавление в очередь и вызов обработчика
public static bool AddToQueue<QueueHandlerType>(
CloudQueue Queue, string Task) {
try {
var Message = new CloudQueueMessage(Task);
Queue.AddMessage(Message);
Internal.RoleCommunicatior.
WorkerRoleCommand(typeof(QueueHandlerType));
return true;
}
catch { return false; } }
28. Расширения для LINQ
Позволяют
осуществлять
операции Or и
Contains для Table
Storage
29. Утилиты безопасности
Работа с шифрованием
MD5, генерация
последовательностей,
системы счисления
34. Связанные сессии
WEB202
ASP.NET for Mobile and Slate Devices
IOP201
Windows Azure and Open Source Solutions
AZR205MN
Запускаем корпоративные сервисы в облака - практика для
разработчика