Your SlideShare is downloading. ×
0
Интеграция Apache Luceneв Windows Azure                          // DevCon•12ВАДИМ НОВИЦКИЙВице-президент по разработке в ...
AtContent.comО сервисе                #msdevcon
AtContent - этоНовый                                         Легальноеподход к      Автоматиза   Управление    копирование...
Архитектура
Демонстрация решенияКак же все происходит внутри?                                Демонстрация                             ...
Apache LuceneПолнотекстовый поиск в Windows Azure                                       #msdevcon
Apache Lucene - этоБиблиотека для полнотекстового поискаВысокопроизводительнаяНаписана на JavaС открытым исходным кодомКро...
Apache Lucene в AtContentИндексирование публикацийИндексирование профилейпользователейПоиск по публикациям и профилямпольз...
Библиотека Lucene.NET forAzureДоступна по ссылке:  http://ou.gs/AzureDirectory                                #msdevcon
Детали реализацииХранение индексовApache Lucene — файлыLucene.NET for Azure — блобыСтруктура данныхЭлемент индекса — докум...
Добавление в индексSearchTicket Ticket = Item.GetSearchTicket();DeleteDocument(Ticket.Id);string Language = DefinitionLang...
Добавление документаvar Doc = new Document();Doc.Add(new Field("Id", Id, Field.Store.YES,Field.Index.NOT_ANALYZED, Field.T...
Блокировка поискового индекса           Поисковый индекс           блокируется на время           изменения
Lease Extensions            Используется            расширение для            блобов, блокирующее            запись в блоб
Особенности исключений          Некоторые исключения          вываливаются из          библиотеки наружу
ПроизводительностьСинтетический тест на 1 000 000 записейЗаполнение индекса — около 250 секундПоиск частоупотребимого слов...
Сделать свой Яндекс?Не получится Отсутствие поддержки морфологииТерабайты индексов нужно где-то хранитьОтличия между поис...
АльтернативыBing API5 000 запросов в сутки бесплатноПоиск по веб, картинкам, новостям, видеоНе решает проблему поиска внут...
CPlase EngineБиблиотека улучшений для Windows Azure                                         #msdevcon
Фабрика контекстов           Создание контекстов           для работы с Table           Storage, Blob Storage и           ...
Фабрика контекстовСоздание контекста для Table Storage //было var StorageAccount = RoleEnvironment.IsEmulated ? CloudStora...
Утилиты для Blob           Работа с хранилищем,           чтение папок, удаление           папок, сериализация в          ...
Утилиты для BlobСохранение данных в блоб //было try {     var BlobClient = Azure.GetBlobClient();     var BlobRef = BlobCl...
Работа с кешем на экземпляре           Создание кеша,           управление кешем,           синхронизация кеша           м...
Сохранение на экземляре//былоvar Storage = RoleEnvironment.GetLocalResource(LocalResourceName);var FinalPath = GetPath(Sto...
Утилиты для работы с Queue           Создание очередей,           управление           сообщениями в           очередях
Работа с QueueДобавление в очередь и вызов обработчика public static bool AddToQueue<QueueHandlerType>(                 Cl...
Расширения для LINQ          Позволяют          осуществлять          операции Or и          Contains для Table          S...
Утилиты безопасности           Работа с шифрованием           MD5, генерация           последовательностей,           сист...
Генерация ключа разделаИспользование утилит безопасности string MD5Bits = Security.GetHashMD5Binary(                     I...
Фреймворк для сообщений          Организация обмена          сообщениями между          ролями и          экземплярами
Примеры сообщенийvar Command = new CPlase.Internal.Commands.           ClearCacheCommand(RESOURCE_NAME, LocalUrl);CPlase.I...
Полезные материалыhttp://ou.gs/AzureDirectoryhttps://cplaseengine.codeplex.comhttp://ou.gs/CPlaseEngineAbout
Связанные сессииWEB202ASP.NET for Mobile and Slate DevicesIOP201Windows Azure and Open Source SolutionsAZR205MNЗапускаем к...
ПожалуйстаОцените доклад и мастерство докладчика.Форма для оценки находится в вашем инфопакете.
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be...
Upcoming SlideShare
Loading in...5
×

IOP202 DevCon 2012 Apache Lucene in Windows Azure

465

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
465
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "IOP202 DevCon 2012 Apache Lucene in Windows Azure"

  1. 1. Интеграция Apache Luceneв Windows Azure // DevCon•12ВАДИМ НОВИЦКИЙВице-президент по разработке в проектеAtContent.com, IFFace Inc.@vadinov | ifface.com
  2. 2. AtContent.comО сервисе #msdevcon
  3. 3. AtContent - этоНовый Легальноеподход к Автоматиза Управление копированиепубликации ция контентом проще ии разделения из одного выгоднеедистрибуции дохода места нелегальногоПлатежная Аналитика Оплата Управлениесистема и разделением авторувнутри статистика дохода напрямую
  4. 4. Архитектура
  5. 5. Демонстрация решенияКак же все происходит внутри? Демонстрация #msdevcon
  6. 6. Apache LuceneПолнотекстовый поиск в Windows Azure #msdevcon
  7. 7. Apache Lucene - этоБиблиотека для полнотекстового поискаВысокопроизводительнаяНаписана на JavaС открытым исходным кодомКроссплатформеннаяПортирована на многие языки программирования, включая C#
  8. 8. Apache Lucene в AtContentИндексирование публикацийИндексирование профилейпользователейПоиск по публикациям и профилямпользователей
  9. 9. Библиотека Lucene.NET forAzureДоступна по ссылке: http://ou.gs/AzureDirectory #msdevcon
  10. 10. Детали реализацииХранение индексовApache Lucene — файлыLucene.NET for Azure — блобыСтруктура данныхЭлемент индекса — документЭлемент документа — поле
  11. 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();
  12. 12. Добавление документаvar Doc = new Document();Doc.Add(new Field("Id", Id, Field.Store.YES,Field.Index.NOT_ANALYZED, Field.TermVector.NO));Doc.Add(new Field("Type", Type, Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));Doc.Add(new Field("IndexField", IndexField,Field.Store.YES, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));Writer.AddDocument(Doc);
  13. 13. Блокировка поискового индекса Поисковый индекс блокируется на время изменения
  14. 14. Lease Extensions Используется расширение для блобов, блокирующее запись в блоб
  15. 15. Особенности исключений Некоторые исключения вываливаются из библиотеки наружу
  16. 16. ПроизводительностьСинтетический тест на 1 000 000 записейЗаполнение индекса — около 250 секундПоиск частоупотребимого слова — 8-25 мс. (50 потоков,478 325 совпадений)Поиск редкоупотребимого слова — ≈0-5 мс. (50 потоков,283 совпадения)Конкурентный поиск не увеличивает время обработки запросаРазмер индекса — 20-30% от исходного контента
  17. 17. Сделать свой Яндекс?Не получится Отсутствие поддержки морфологииТерабайты индексов нужно где-то хранитьОтличия между поисковым движком и поисковой системой
  18. 18. АльтернативыBing API5 000 запросов в сутки бесплатноПоиск по веб, картинкам, новостям, видеоНе решает проблему поиска внутри сервисаSphinxПотребует дополнительного MySQL-сервераБолее сложная интеграцияНЕ масштабируется
  19. 19. CPlase EngineБиблиотека улучшений для Windows Azure #msdevcon
  20. 20. Фабрика контекстов Создание контекстов для работы с Table Storage, Blob Storage и Queue
  21. 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. 22. Утилиты для Blob Работа с хранилищем, чтение папок, удаление папок, сериализация в блобы
  23. 23. Утилиты для BlobСохранение данных в блоб //было try { var BlobClient = Azure.GetBlobClient(); var BlobRef = BlobClient.GetBlobReference(BlobUrl); BlobRef.UploadText(Content); } catch { } //стало CPlase.BlobUtils.SaveBlob(BlobUrl, Content);
  24. 24. Работа с кешем на экземпляре Создание кеша, управление кешем, синхронизация кеша между инстанциями
  25. 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. 26. Утилиты для работы с Queue Создание очередей, управление сообщениями в очередях
  27. 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. 28. Расширения для LINQ Позволяют осуществлять операции Or и Contains для Table Storage
  29. 29. Утилиты безопасности Работа с шифрованием MD5, генерация последовательностей, системы счисления
  30. 30. Генерация ключа разделаИспользование утилит безопасности string MD5Bits = Security.GetHashMD5Binary( InputString, PartitionBitCount); string MD5PartitionBits = Convert.ToString(Convert.ToInt32(MD5Bits, 2), 16); Entity.PartitionKey = MD5PartitionBits;
  31. 31. Фреймворк для сообщений Организация обмена сообщениями между ролями и экземплярами
  32. 32. Примеры сообщенийvar Command = new CPlase.Internal.Commands. ClearCacheCommand(RESOURCE_NAME, LocalUrl);CPlase.Internal.RoleCommunicatior.WebRoleCommand(Command);CPlase.Internal.RoleCommunicatior. WorkerRoleEchoCommand(Command);CPlase.Internal.RoleCommunicatior. WorkerRoleCommand(typeof(QueueHandlerType));
  33. 33. Полезные материалыhttp://ou.gs/AzureDirectoryhttps://cplaseengine.codeplex.comhttp://ou.gs/CPlaseEngineAbout
  34. 34. Связанные сессииWEB202ASP.NET for Mobile and Slate DevicesIOP201Windows Azure and Open Source SolutionsAZR205MNЗапускаем корпоративные сервисы в облака - практика дляразработчика
  35. 35. ПожалуйстаОцените доклад и мастерство докладчика.Форма для оценки находится в вашем инфопакете.
  36. 36. © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×