The presentation describes how to design robust solution for tagging search, how to use tagging for faceted search. Various architecture and data patterns are considered. We discuss relational databases like Oracle, full text search servers like Apache Solr. We will see how Oracle 18c features permit to use embedded faceted search.
Building Operational Data Lake using Spark and SequoiaDB with Yang PengDatabricks
This topic describes the use of Spark and SequoiaDB in the Operational Data Lake of China’s financial industry, including how to use SequoiaDB to provide online high concurrent services and how to use Spark for data processing and machine learning. China has the world’s largest population, and also the world’s second largest economy. Many of the best technologies used in the United States and Europe are difficult to play effectively in China. This topic will show you how Spark and SequoiaDB are able to provide online financial services to billions of population.
Building Operational Data Lake using Spark and SequoiaDB with Yang PengDatabricks
This topic describes the use of Spark and SequoiaDB in the Operational Data Lake of China’s financial industry, including how to use SequoiaDB to provide online high concurrent services and how to use Spark for data processing and machine learning. China has the world’s largest population, and also the world’s second largest economy. Many of the best technologies used in the United States and Europe are difficult to play effectively in China. This topic will show you how Spark and SequoiaDB are able to provide online financial services to billions of population.
Writing Continuous Applications with Structured Streaming in PySparkDatabricks
We are in the midst of a Big Data Zeitgeist in which data comes at us fast, in myriad forms and formats at intermittent intervals or in a continuous stream, and we need to respond to streaming data immediately. This need has created a notion of writing a streaming application that reacts and interacts with data in real-time. We call this a continuous application. In this talk we will explore the concepts and motivations behind continuous applications and how Structured Streaming Python APIs in Apache Spark 2.x enables writing them. We also will examine the programming model behind Structured Streaming and the APIs that support them. Through a short demo and code examples, Jules will demonstrate how to write an end-to-end Structured Streaming application that reacts and interacts with both real-time and historical data to perform advanced analytics using Spark SQL, DataFrames, and Datasets APIs.
Deep Dive Into Apache Spark Multi-User Performance Michael Feiman, Mikhail Ge...Databricks
When you run an Apache Spark application on a large cluster, you want to make sure you’re getting the most from that cluster. Any CPU or memory left on the table represents either a waste of money or a lost opportunity to speed up your Spark jobs. What many people don’t realize is how sensitive Spark cluster utilization is to the resource manager. Resource managers decide how to allocate cluster resources among the many users and applications contending for them. In this deep dive session, we will discuss how Spark integrates with two common open source resource managers, YARN and Mesos, as well as a new commercial product called IBM Spectrum Conductor with Spark. You will learn how resource managers arbitrate resources in multi-user/multi-tenant Spark clusters, and how this affects application performance. You will come away with new techniques for tuning Spark resource management to optimize goals like speed and fairness. The session will include a demo of a new open source benchmark designed to help analyse Spark multi-user/multi-tenant performance. The benchmark uses Spark SQL and machine learning jobs to load the cluster, and can be used during a pre-production cycle to tune Spark and resource manager configurations.
The majority of cloud-based DWH provides a wide range of migration tools from in-house DWH. However, I believe that cloud migration success is based not only on reducing infrastructure maintenance costs, but also on additional performance profit inherited from tailored data model.
I am going to prove that copying star or snowflake schemas as is will not lead to maximum performance boost in such DWH as Amazon Redshift and Google BigQuery. Moreover, this approach may cause additional cloud expenses.
We will discuss why data models should be different for each particular database, and how to get maximum performance from database peculiarities.
Most of performance tuning techniques for cloud-based DWH are about adding extra nodes to cluster, but it may lead to performance degradation in some cases, as well as extra costs burden. Sometimes, this approach allows to get maximum speed from current hardware configuration, may be even less expensive servers.
I will show some examples from production projects with extra performance using lower hardware, and edge cases like huge wide fact table with fully denormalized dimensions instead of classical star schema.
One of the key differences between Presto and Hive, also a crucial functional requirement Facebook made when launching this new SQL engine project, was to have the opportunity to query different kinds of data sources via a uniform ANSI SQL interface.
Presto, an open source distributed analytical SQL engine, implements this with it’s connector architecture, creating an abstraction layer for anything that can be expressed as in a row-like format, ranging from MySQL tables, HDFS, Amazon S3 to NoSQL stores, Kafka streams and proprietary data sources. Presto connector SPI allows anyone to implement a Presto connector and benefit from the capabilities of the Presto SQL engine, enabling them to join data from various sources within a single SQL query.
Operating and Supporting Delta Lake in ProductionDatabricks
Delta lake is widely adopted. There are things to be aware of when dealing with petabytes of data in Delta Lake. These smart decisions can give the best efficiency and increase the adoption of Delta. Best practices like OPTIMIZE, ZORDER have to wisely chosen. We have support stories where we successfully resolved performance issues by applying the right performance strategy. There are a set of common issues or repeated questions from our strategic customers face when using Delta and in this session we cover them and how to address them.
Hekaton is the original project name for In-Memory OLTP and just sounds cooler for a title name. Keeping up the tradition of deep technical “Inside” sessions at PASS, this half-day talk will take you behind the scenes and under the covers on how the In-Memory OLTP functionality works with SQL Server.
We will cover “everything Hekaton”, including how it is integrated with the SQL Server Engine Architecture. We will explore how data is stored in memory and on disk, how I/O works, how native complied procedures are built and executed. We will also look at how Hekaton integrates with the rest of the engine, including Backup, Restore, Recovery, High-Availability, Transaction Logging, and Troubleshooting.
Demos are a must for a half-day session like this and what would an inside session be if we didn’t bring out the Windows Debugger. As with previous “Inside…” talks I’ve presented at PASS, this session is level 500 and not for the faint of heart. So read through the docs on In-Memory OLTP and bring some extra pain reliever as we move fast and go deep.
This session will appear as two sessions in the program guide but is not a Part I and II. It is one complete session with a small break so you should plan to attend it all to get the maximum benefit.
Optimising Geospatial Queries with Dynamic File PruningDatabricks
One of the most significant benefits provided by Databricks Delta is the ability to use z-ordering and dynamic file pruning to significantly reduce the amount of data that is retrieved from blob storage and therefore drastically improve query times, sometimes by an order of magnitude.
Making Apache Spark Better with Delta LakeDatabricks
Delta Lake is an open-source storage layer that brings reliability to data lakes. Delta Lake offers ACID transactions, scalable metadata handling, and unifies the streaming and batch data processing. It runs on top of your existing data lake and is fully compatible with Apache Spark APIs.
In this talk, we will cover:
* What data quality problems Delta helps address
* How to convert your existing application to Delta Lake
* How the Delta Lake transaction protocol works internally
* The Delta Lake roadmap for the next few releases
* How to get involved!
Building a Large Scale SEO/SEM Application with Apache SolrRahul Jain
Slides from my talk on "Building a Large Scale SEO/SEM Application with Apache Solr" in Lucene/Solr Revolution 2014 where I talk how we handle Indexing/Search of 40 billion records (documents)/month in Apache Solr with 4.6 TB compressed index data.
Abstract: We are working on building a SEO/SEM application where an end user search for a "keyword" or a "domain" and gets all the insights about these including Search engine ranking, CPC/CPM, search volume, No. of Ads, competitors details etc. in a couple of seconds. To have this intelligence, we get huge web data from various sources and after intensive processing it is 40 billion records/month in MySQL database with 4.6 TB compressed index data in Apache Solr.
Due to large volume, we faced several challenges while improving indexing performance, search latency and scaling the overall system. In this session, I will talk about our several design approaches to import data faster from MySQL, tricks & techniques to improve the indexing performance, Distributed Search, DocValues(life saver), Redis and the overall system architecture.
Brk3288 sql server v.next with support on linux, windows and containers was...Bob Ward
SQL Server is bringing its world-class RDBMS to Linux and Windows with SQL Server v.Next. In this session you will learn what´s next for SQL Server on Linux and how application developers and IT architects can now leverage the enterprise class features of SQL Server in every edition on Linux, Windows and containers.
Sudarshan Kadambi presented this talk at the Bay Area Spark Meetup @ Bloomberg. He covered Bloomberg Apache Spark Server and contributions to Apache Spark. The talk also talked about challenges of doing high-volume online analytics while still observing high-levels of SLAs
Optimizing Delta/Parquet Data Lakes for Apache SparkDatabricks
This talk outlines data lake design patterns that can yield massive performance gains for all downstream consumers. We will talk about how to optimize Parquet data lakes and the awesome additional features provided by Databricks Delta. * Optimal file sizes in a data lake * File compaction to fix the small file problem * Why Spark hates globbing S3 files * Partitioning data lakes with partitionBy * Parquet predicate pushdown filtering * Limitations of Parquet data lakes (files aren't mutable!) * Mutating Delta lakes * Data skipping with Delta ZORDER indexes
Speaker: Matthew Powers
SQL Server In-Memory OLTP: What Every SQL Professional Should KnowBob Ward
Perhaps you have heard the term “In-Memory” but not sure what it means. If you are a SQL Server Professional then you will want to know. Even if you are new to SQL Server, you will want to learn more about this topic. Come learn the basics of how In-Memory OLTP technology in SQL Server 2016 and Azure SQL Database can boost your OLTP application by 30X. We will compare how In-Memory OTLP works vs “normal” disk-based tables. We will discuss what is required to migrate your existing data into memory optimized tables or how to build a new set of data and applications to take advantage of this technology. This presentation will cover the fundamentals of what, how, and why this technology is something every SQL Server Professional should know
(ATS6-PLAT02) Accelrys Catalog and Protocol ValidationBIOVIA
Accelrys Catalog is a powerful new technology for creating an index of the protocols and components within your organization. You will learn about strategies for indexing and how search capabilities can be deployed to professional client and Web Port end users. You will also learn how to use this technology to find out about system usage to aid with system upgrades, server consolidations, and general system maintenance. The protocol validation capability in the admin portal allows administrators to created standard reports on server usage characteristics. You will learn how to report on violations of IT policies (e.g. around security), bad protocol authoring practices, or missing or incomplete protocol documentation. Developers will also learn how to extend and customize the rules used to create these reports.
Writing Continuous Applications with Structured Streaming in PySparkDatabricks
We are in the midst of a Big Data Zeitgeist in which data comes at us fast, in myriad forms and formats at intermittent intervals or in a continuous stream, and we need to respond to streaming data immediately. This need has created a notion of writing a streaming application that reacts and interacts with data in real-time. We call this a continuous application. In this talk we will explore the concepts and motivations behind continuous applications and how Structured Streaming Python APIs in Apache Spark 2.x enables writing them. We also will examine the programming model behind Structured Streaming and the APIs that support them. Through a short demo and code examples, Jules will demonstrate how to write an end-to-end Structured Streaming application that reacts and interacts with both real-time and historical data to perform advanced analytics using Spark SQL, DataFrames, and Datasets APIs.
Deep Dive Into Apache Spark Multi-User Performance Michael Feiman, Mikhail Ge...Databricks
When you run an Apache Spark application on a large cluster, you want to make sure you’re getting the most from that cluster. Any CPU or memory left on the table represents either a waste of money or a lost opportunity to speed up your Spark jobs. What many people don’t realize is how sensitive Spark cluster utilization is to the resource manager. Resource managers decide how to allocate cluster resources among the many users and applications contending for them. In this deep dive session, we will discuss how Spark integrates with two common open source resource managers, YARN and Mesos, as well as a new commercial product called IBM Spectrum Conductor with Spark. You will learn how resource managers arbitrate resources in multi-user/multi-tenant Spark clusters, and how this affects application performance. You will come away with new techniques for tuning Spark resource management to optimize goals like speed and fairness. The session will include a demo of a new open source benchmark designed to help analyse Spark multi-user/multi-tenant performance. The benchmark uses Spark SQL and machine learning jobs to load the cluster, and can be used during a pre-production cycle to tune Spark and resource manager configurations.
The majority of cloud-based DWH provides a wide range of migration tools from in-house DWH. However, I believe that cloud migration success is based not only on reducing infrastructure maintenance costs, but also on additional performance profit inherited from tailored data model.
I am going to prove that copying star or snowflake schemas as is will not lead to maximum performance boost in such DWH as Amazon Redshift and Google BigQuery. Moreover, this approach may cause additional cloud expenses.
We will discuss why data models should be different for each particular database, and how to get maximum performance from database peculiarities.
Most of performance tuning techniques for cloud-based DWH are about adding extra nodes to cluster, but it may lead to performance degradation in some cases, as well as extra costs burden. Sometimes, this approach allows to get maximum speed from current hardware configuration, may be even less expensive servers.
I will show some examples from production projects with extra performance using lower hardware, and edge cases like huge wide fact table with fully denormalized dimensions instead of classical star schema.
One of the key differences between Presto and Hive, also a crucial functional requirement Facebook made when launching this new SQL engine project, was to have the opportunity to query different kinds of data sources via a uniform ANSI SQL interface.
Presto, an open source distributed analytical SQL engine, implements this with it’s connector architecture, creating an abstraction layer for anything that can be expressed as in a row-like format, ranging from MySQL tables, HDFS, Amazon S3 to NoSQL stores, Kafka streams and proprietary data sources. Presto connector SPI allows anyone to implement a Presto connector and benefit from the capabilities of the Presto SQL engine, enabling them to join data from various sources within a single SQL query.
Operating and Supporting Delta Lake in ProductionDatabricks
Delta lake is widely adopted. There are things to be aware of when dealing with petabytes of data in Delta Lake. These smart decisions can give the best efficiency and increase the adoption of Delta. Best practices like OPTIMIZE, ZORDER have to wisely chosen. We have support stories where we successfully resolved performance issues by applying the right performance strategy. There are a set of common issues or repeated questions from our strategic customers face when using Delta and in this session we cover them and how to address them.
Hekaton is the original project name for In-Memory OLTP and just sounds cooler for a title name. Keeping up the tradition of deep technical “Inside” sessions at PASS, this half-day talk will take you behind the scenes and under the covers on how the In-Memory OLTP functionality works with SQL Server.
We will cover “everything Hekaton”, including how it is integrated with the SQL Server Engine Architecture. We will explore how data is stored in memory and on disk, how I/O works, how native complied procedures are built and executed. We will also look at how Hekaton integrates with the rest of the engine, including Backup, Restore, Recovery, High-Availability, Transaction Logging, and Troubleshooting.
Demos are a must for a half-day session like this and what would an inside session be if we didn’t bring out the Windows Debugger. As with previous “Inside…” talks I’ve presented at PASS, this session is level 500 and not for the faint of heart. So read through the docs on In-Memory OLTP and bring some extra pain reliever as we move fast and go deep.
This session will appear as two sessions in the program guide but is not a Part I and II. It is one complete session with a small break so you should plan to attend it all to get the maximum benefit.
Optimising Geospatial Queries with Dynamic File PruningDatabricks
One of the most significant benefits provided by Databricks Delta is the ability to use z-ordering and dynamic file pruning to significantly reduce the amount of data that is retrieved from blob storage and therefore drastically improve query times, sometimes by an order of magnitude.
Making Apache Spark Better with Delta LakeDatabricks
Delta Lake is an open-source storage layer that brings reliability to data lakes. Delta Lake offers ACID transactions, scalable metadata handling, and unifies the streaming and batch data processing. It runs on top of your existing data lake and is fully compatible with Apache Spark APIs.
In this talk, we will cover:
* What data quality problems Delta helps address
* How to convert your existing application to Delta Lake
* How the Delta Lake transaction protocol works internally
* The Delta Lake roadmap for the next few releases
* How to get involved!
Building a Large Scale SEO/SEM Application with Apache SolrRahul Jain
Slides from my talk on "Building a Large Scale SEO/SEM Application with Apache Solr" in Lucene/Solr Revolution 2014 where I talk how we handle Indexing/Search of 40 billion records (documents)/month in Apache Solr with 4.6 TB compressed index data.
Abstract: We are working on building a SEO/SEM application where an end user search for a "keyword" or a "domain" and gets all the insights about these including Search engine ranking, CPC/CPM, search volume, No. of Ads, competitors details etc. in a couple of seconds. To have this intelligence, we get huge web data from various sources and after intensive processing it is 40 billion records/month in MySQL database with 4.6 TB compressed index data in Apache Solr.
Due to large volume, we faced several challenges while improving indexing performance, search latency and scaling the overall system. In this session, I will talk about our several design approaches to import data faster from MySQL, tricks & techniques to improve the indexing performance, Distributed Search, DocValues(life saver), Redis and the overall system architecture.
Brk3288 sql server v.next with support on linux, windows and containers was...Bob Ward
SQL Server is bringing its world-class RDBMS to Linux and Windows with SQL Server v.Next. In this session you will learn what´s next for SQL Server on Linux and how application developers and IT architects can now leverage the enterprise class features of SQL Server in every edition on Linux, Windows and containers.
Sudarshan Kadambi presented this talk at the Bay Area Spark Meetup @ Bloomberg. He covered Bloomberg Apache Spark Server and contributions to Apache Spark. The talk also talked about challenges of doing high-volume online analytics while still observing high-levels of SLAs
Optimizing Delta/Parquet Data Lakes for Apache SparkDatabricks
This talk outlines data lake design patterns that can yield massive performance gains for all downstream consumers. We will talk about how to optimize Parquet data lakes and the awesome additional features provided by Databricks Delta. * Optimal file sizes in a data lake * File compaction to fix the small file problem * Why Spark hates globbing S3 files * Partitioning data lakes with partitionBy * Parquet predicate pushdown filtering * Limitations of Parquet data lakes (files aren't mutable!) * Mutating Delta lakes * Data skipping with Delta ZORDER indexes
Speaker: Matthew Powers
SQL Server In-Memory OLTP: What Every SQL Professional Should KnowBob Ward
Perhaps you have heard the term “In-Memory” but not sure what it means. If you are a SQL Server Professional then you will want to know. Even if you are new to SQL Server, you will want to learn more about this topic. Come learn the basics of how In-Memory OLTP technology in SQL Server 2016 and Azure SQL Database can boost your OLTP application by 30X. We will compare how In-Memory OTLP works vs “normal” disk-based tables. We will discuss what is required to migrate your existing data into memory optimized tables or how to build a new set of data and applications to take advantage of this technology. This presentation will cover the fundamentals of what, how, and why this technology is something every SQL Server Professional should know
(ATS6-PLAT02) Accelrys Catalog and Protocol ValidationBIOVIA
Accelrys Catalog is a powerful new technology for creating an index of the protocols and components within your organization. You will learn about strategies for indexing and how search capabilities can be deployed to professional client and Web Port end users. You will also learn how to use this technology to find out about system usage to aid with system upgrades, server consolidations, and general system maintenance. The protocol validation capability in the admin portal allows administrators to created standard reports on server usage characteristics. You will learn how to report on violations of IT policies (e.g. around security), bad protocol authoring practices, or missing or incomplete protocol documentation. Developers will also learn how to extend and customize the rules used to create these reports.
Developing Search-driven application in SharePoint 2013 SPC Adriatics
Search-driven solutions are applications that use a search engine to drive the data access and present results. Microsoft SharePoint 2013 offers developers new ways to extend search to create search-based solutions and Apps. Using Search applications, developers can unite and control data from different site collections and external locations. In this session, I will cover all different ways of querying SharePoint 2013 Search including Client-Side Object Model (CSOM) and REST API. The main goal of the session is to provide strong understanding of search-driven solutions for the attendees and encourage many new ideas for using search to deliver end-user productivity.
Darko Milevski
Search-driven solutions are applications that use a search engine to drive the data access and present results. Microsoft SharePoint 2013 offers developers new ways to extend search to create search-based solutions and Apps. Using Search applications, developers can unite and control data from different site collections and external locations. In this session, I will cover all different ways of querying SharePoint 2013 Search including Client-Side Object Model (CSOM) and REST API. The main goal of the session is to provide strong understanding of search-driven solutions for the attendees and encourage many new ideas for using search to deliver end-user productivity.
Essentials for the SharePoint Power User - SPTechCon San Francisco 2016Drew Madelung
Are you a newly minted site owner and you want to know how to get started? Or did your company just roll out SharePoint and you want to learn more about what it can do?
In this session, I will walk through what Power Users need to know when they become site administrators, champions, ninjas, or owners. I will be going through things at an overview level. I will go into detail on some areas in which I have seen the biggest gaps while working with different companies. This session will go through such things as:
· Managing security
· Managing libraries and lists
· Managing search
· What are the features available and what do they do?
· Building a useful site with pages, views and web parts
In this session, storage experts will walk you through the object storage offering, Amazon S3, a bulk data repository that can deliver 99.999999999% durability and scale past trillions of objects worldwide. Learn about the different ways you can accelerate data transfer to S3 and get a close look at some of the new tools available for you to secure and manage your data more efficiently. Announced at re:Invent 2016, see how you can use Amazon Athena with S3 to run serverless analytics on your data and as a bonus, walk away with some code snippets to use with S3. Hear AWS customers talk about the solutions they have built with S3 to turn their data into a strategic asset, instead of just a cost center. And bring your toughest questions to our experts on hand and walk away that much smarter on how to use object storage from AWS.
Essentials for the SharePoint Power User - SharePoint Engage Raleigh 2017Drew Madelung
Are you a newly minted site owner and you want to know how to get started? Or did your company just roll out SharePoint and you want to learn more about what it can do?
In this session, I will walk through what I believe Power Users need to know when they become site administrators, champions, ninjas, or owners. I will be going through things at an overview level. I will go into detail on some areas in which I have seen the biggest gaps while working with different companies. This session will go through such things as:
• How security works and how you should manage it
• Intro to libraries & lists
• Managing content types and columns
• Get better search driven content
• Building a page with search driven web parts
The presentation explains how to setup rate limits, how to work with 429 code, how rate limits are implemented in kubernetes, cni, loadbalancer and so on
the presentation is about federated GraphQL in huge enterprises. I explain why and what for big enterprises need distributed GraphQL and classic one does not work.
the presentation describes a lot of very technical details about row level security, possibble security breaches in relational databases like Oracle and Postgres. A lot of examples how to protect data is shown.
The presentation describes various options for implementing row-level security in enterprise applications: database side, application server side, mixed approaches. we consider oracle virtual private database, different encription options and possible security breaches and their mitigation path.
Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018Alexander Tokarev
The presentation was prepared for Austria Oracle User group 30 years. It tells us a lot of challenges which Oracle developers face with implementing high-load json processing pipelines.
The presentation is a deep analysis of Oracle JSON treatment feauture. It is considered to real-life experience and workarounds to defeat known json errors.
The presentation is an advanced version about Oracle Result cache feature. It is rewritten presentation from HIGLOAD-2017. A lot of result cache internals under the cover.
Изначально будут раскрыты базовые причины, которые заставили появиться такой части механизма СУБД, как кэш результатов, и почему в ряде СУБД он есть или отсутствует.
Будут рассмотрены различные варианты кэширования результатов как sql-запросов, так и результатов хранимой в БД бизнес-логики. Произведено сравнение способов кэширования (программируемые вручную кэши, стандартный функционал) и даны рекомендации, когда и в каких случаях данные способы оптимальны, а порой опасны.
Для каждой из рекомендаций будут продемонстрированы как положительные так и отрицательные кейсы из опыта production-эксплуатации реальных систем, где используются разные варианты кэшей
The presentation describes what is Apache Solr, how it could be used. There is apache solr overview, performance tuning tips and advanced features description
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Launch Your Streaming Platforms in MinutesRoshan Dwivedi
The claim of launching a streaming platform in minutes might be a bit of an exaggeration, but there are services that can significantly streamline the process. Here's a breakdown:
Pros of Speedy Streaming Platform Launch Services:
No coding required: These services often use drag-and-drop interfaces or pre-built templates, eliminating the need for programming knowledge.
Faster setup: Compared to building from scratch, these platforms can get you up and running much quicker.
All-in-one solutions: Many services offer features like content management systems (CMS), video players, and monetization tools, reducing the need for multiple integrations.
Things to Consider:
Limited customization: These platforms may offer less flexibility in design and functionality compared to custom-built solutions.
Scalability: As your audience grows, you might need to upgrade to a more robust platform or encounter limitations with the "quick launch" option.
Features: Carefully evaluate which features are included and if they meet your specific needs (e.g., live streaming, subscription options).
Examples of Services for Launching Streaming Platforms:
Muvi [muvi com]
Uscreen [usencreen tv]
Alternatives to Consider:
Existing Streaming platforms: Platforms like YouTube or Twitch might be suitable for basic streaming needs, though monetization options might be limited.
Custom Development: While more time-consuming, custom development offers the most control and flexibility for your platform.
Overall, launching a streaming platform in minutes might not be entirely realistic, but these services can significantly speed up the process compared to building from scratch. Carefully consider your needs and budget when choosing the best option for you.
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
Enterprise Resource Planning System includes various modules that reduce any business's workload. Additionally, it organizes the workflows, which drives towards enhancing productivity. Here are a detailed explanation of the ERP modules. Going through the points will help you understand how the software is changing the work dynamics.
To know more details here: https://blogs.nyggs.com/nyggs/enterprise-resource-planning-erp-system-modules/
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxrickgrimesss22
Discover the essential features to incorporate in your Winzo clone app to boost business growth, enhance user engagement, and drive revenue. Learn how to create a compelling gaming experience that stands out in the competitive market.
AI Genie Review: World’s First Open AI WordPress Website CreatorGoogle
AI Genie Review: World’s First Open AI WordPress Website Creator
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-genie-review
AI Genie Review: Key Features
✅Creates Limitless Real-Time Unique Content, auto-publishing Posts, Pages & Images directly from Chat GPT & Open AI on WordPress in any Niche
✅First & Only Google Bard Approved Software That Publishes 100% Original, SEO Friendly Content using Open AI
✅Publish Automated Posts and Pages using AI Genie directly on Your website
✅50 DFY Websites Included Without Adding Any Images, Content Or Doing Anything Yourself
✅Integrated Chat GPT Bot gives Instant Answers on Your Website to Visitors
✅Just Enter the title, and your Content for Pages and Posts will be ready on your website
✅Automatically insert visually appealing images into posts based on keywords and titles.
✅Choose the temperature of the content and control its randomness.
✅Control the length of the content to be generated.
✅Never Worry About Paying Huge Money Monthly To Top Content Creation Platforms
✅100% Easy-to-Use, Newbie-Friendly Technology
✅30-Days Money-Back Guarantee
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIGenieApp #AIGenieBonus #AIGenieBonuses #AIGenieDemo #AIGenieDownload #AIGenieLegit #AIGenieLiveDemo #AIGenieOTO #AIGeniePreview #AIGenieReview #AIGenieReviewandBonus #AIGenieScamorLegit #AIGenieSoftware #AIGenieUpgrades #AIGenieUpsells #HowDoesAlGenie #HowtoBuyAIGenie #HowtoMakeMoneywithAIGenie #MakeMoneyOnline #MakeMoneywithAIGenie
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
3. Tagging
• Keyword assigned to an object
• Chosen informally and personally by item's creator or viewer
• Assigned by the viewer + unlimited = Folksonomy
• Assigned by the creator + limited = Taxonomy
26. Postgres nested tables
…………
moves field values out-of-line
…………
wider than TOAST_TUPLE_THRESHOLD bytes (normally 2 kB)
…………
in a chunk which stored as a separate row in the TOAST table belonging to the owning table
28. Ingestion
0 500 1000 1500 2000 2500
Relational
Denormalized
Complex data type
Full text search
Insert time, seconds
29. Database size
0 200 400 600 800 1000 1200 1400
Relational
Denormalized
Complex data type
Full text search
Volume
Index size, MB Data size, MB Size total, MB
31. Search by Id, tag list retrieval
0 0.0005 0.001 0.0015 0.002 0.0025 0.003 0.0035
Relational
Denormalized
Complex data type
Full text search
Speed with hot cache, seconds
34. Search by a single tag, tag list retrieval
0 0.001 0.002 0.003 0.004 0.005 0.006
Relational
Denormalized
Complex data type
Full text search
Speed with hot cache, seconds
40. Search by multiple tags, tag list retrieval
0 0.5 1 1.5 2 2.5
Relational
Denormalized
Complex data type
Full text search
Advanced relational
Advanced denormalized
Speed with hot cache, seconds
65. Index magic
• Space saving: 40%
• Ingestion degradation: 1%
• Search improvement: 7%
66. Final architecture
• Async in UI = hide performance issues
• Denormalized tagging model
• Compressed B-tree indexes – search by tags
• Full text search indexes – name and description
Average search time
0.4 second
74. Proper search
FTS
inside DB
+
FTS model
Relational/denormalized/FTS
model
• Approach 1 • Approach 2
FTS server
(Lucene, Sphinx,
Elastic, Solr,
Xapian, etc)
Application
server
Application
server
75. Apache Solr
• True open source (under Apache)
• Built over Lucene
• Multi-language support
• Various client APIs
• Versatile query language
• Dedicated language for faceted navigation
• Extremely scalable with auto-scale framework
• Full of additional features
83. Full text search performance
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045
Retrieval by id
Retrieval by single tag
Retrieval by multiple tag
Speed, seconds
Solr FTS hot cache DB FTS hot cache
85. Conclusion
1. Try and measure
2. Trust in your DBMS unique features
3. Understand how DBMS features created internally
4. No conditions + no faceted navigation = denormalized RDBMS
5. Conditional queries by tags + faceted navigation = FTS server
6. Search by tags <> analytic by tags
86. THANK YOU
WE ARE HIRING!
Alexander Tokarev
Database expert
DataArt
shtock@mail.ru
https://github.com/shtock
Editor's Notes
Добрый день. Меня зовут Александр и я решаю в компании DataArt вопросы, связанные с архитектурой приложений, особенно в части баз данных.
Сегодня мы обсудим такие простые и одновременно сложные вопросы, как
поиск по тегам,
какие он можно создать вызовы как в части базы данных, так и архитектуры приложения в целом
Как же должна в итоге выглядеть база данных
И как оптимально осущестлять навигацию по тегированным объектам.
Я расскажу каким получился наш движок в условиях наших ограничений.
После сеции вопросов и ответов я дам ссылки на гитхаб и исходные данные
Что такое тэг на первый взгляд понято:
Это некое ключевое слов присвоенное к тегируемому объекты
Чаще всего теги задаются неформально либо автором, либо тем, кто просматривает тегируемый объек
Если теги неограничены и присваютрся автором, это называется фолксономия (от слова folk - народ)
Если же набор ограничен и присвоен создателем, то это таксономия
Собственно как теги представлены визуальнои в вашем приложении и каков их типовой сценарий использования это и определяет архитектуру возможного решения.
Это может быть как стандартное облако тегов, так и весьма аскетичное в стиле StackOverflow
Собственно от щелчком на теги которого мы переходим все объекты с данным тегом и получаем подобие faceted навигации в правом угле
И можем уже провалиться в конкретный объект с набором тегов
Более сложной формой представления, которую иногда в ядре строят на тегах является фацетная навигация, где теги круппируются в фацеты и по тегам выводится статистика. Соответсено результат поиска постепенно сужается при выборе нужных тегов. Так как для фацетов используется AND, а для тегов используется OR, это приводит к определённым нюансам, которые мы рассмотрим позже.
Почему же теггинг это хорошо?
1. Потому что он отражает словарь пользовател1
2. Решение гибкое – сам добавил, сам удалил
3. Многомерно по-сути и поэтому тегируемый объект и
Гибкость приводит и к ожидаемым проблемам:
Ошибки написания, множественное число, составные слова
Неоднозначное присвоение тегов, теги понятные только их автору
Использование для описание одного и того же различных синонимиов, акронимов и так далее
Таким образом, гибкость приводит нас к ожидаемым проблемам1. производительности
2. Тяжести запросов3. Неконтролируемому увеличению базы данных
4. Дополнительное обслуживание базы данных тегов
На самом деле программист должен сделать в своей жизни ряд вещей:
Написать Hello World
Посадить дерево
Сделать свой tagging search
Как сделать его более быстрым сейчас и рассмотрим
Скорее всего, первая попытка сделать движок поиска по тегам и фацетную нафигацию на нём выйдет, но будет весьма незрела.
Чтобы оценить её мне кажется как никогда более подходит всем известная вам картинка
Собственно пингвинами мы и будем мерить зрелость нашего решения
Если подойти очень обще, то чаще всего архитектурные решения для поиска по тегам и фацетной навигации делятся на 2 вида:
Теги хранятся в реляционной базе данных в виде таблиц и общение с ними происходит на языке SQL
Теги находятся в полнотекстовой базе данных
Прежде чем мы начнём рассматривать различные модели данных и наш движок надо определиться с тестовыми данными.
Я изначала подумал, что неправильно будет создавать абстрактные тестовые данные и воспользовался очевидным источником, который рекомендую и вам для различных экспериментов.
Это StackOverflow
Обратите внимание, что тегов на пост максимум 5 – это явно сознательное ограничение платформы
Сайт Stackoverflow имеет прекрасный интерфейс для выгрузки данных, в котором можно писать sql к 22 таблицам StackOverflow и сохранять запросы за исключением того, что после 100000 строк надо вводить капчу.
Помните, что я вначале рассказывал, что наличие тегов приводит к некоим проблемам. Например, используются синонимы. Когда я подготавлива тестовые данные в StackOverflow я нашёл ту самую таблицу синонимов.
Попробуем посмотреть на модели БД с точки зрения их зрелости. Первая модель – самая очевидная и нормализованная.
Есть таблица тэгов, тегируемых документов и связь между ними.
Я бы сказал это начало с точки зрения нашей penguin maturity model.
Когда рано или поздно возникает проблема производительности большинство переходит к денормализованной модели с не менее очевидной структурой.
Тэги привязаны сразу же к документу без промежуточной таблицы.
Тем не менее при увеличении набора данных данных даже такой денормализации становится недостаточно и тут обычно все пытаются уже использовать фишки СУБД
Какие? Абсолютно понятные – возможность хранить составные типы данных в одной строке с данными исходного документа.
Наиболее опасный момент данного решение состоит в том, чтобы понять как это решение устроено изнутри и не является ли такой сложный тип замаскированными таблицами.
Давайте посмотрим на эти типы данных в Oracle
Теперь посмотрим, что в оракле
Для начала создаём теги и массив из них
А далее указываем, что данный массив должен находиться в таблице
Есть некий синтаксический сахар, который наталкивает на мысли о дополнительной проверке
Проверяем не является ли TAGS_TAB обыкновенной таблицей и вроде бы данных нет, НО!
Однако когда мы смотрим в таблицу индексов, то видно, что всё же таблица существует, но её не видно простыми средствами.
Столбцы её видны в другом месте, что показывает, что в целом этот вариант аналогичен варианту с денормализацией и разница проявится в будущем только в запросах
Создадим тогда обычный уникальный индекс для ускорения поиска, ибо у Оракла нет аналогов GIN и начнём замеры
Однако когда мы смотрим в таблицу индексов, то видно, что всё же таблица существует, но её не видно простыми средствами.
Столбцы её видны в другом месте, что показывает, что в целом этот вариант аналогичен варианту с денормализацией и разница проявится в будущем только в запросах
Создадим тогда обычный уникальный индекс для ускорения поиска, ибо у Оракла нет аналогов GIN и начнём замеры
Создаём таблицу с типом данных Массив, заполняем её данными идентицируем файл, в котором она находится
Создаём таблицу с типом данных Массив, заполняем её данными идентицируем файл, в котором она находится
Собственно вот наш файл, причём размером 8 килобайт – стандартный размер страницы в пострессе и мы видим, что с Postgress ситуация несколько лучше – массивы хранятся в том же блоке данных, что и основная таблиц, однако есть нюанс
Если почитать документацию Postgres, то можно увидеть, что inline не настоящий Но я слабо верю, что тегов может стать так много, что значения выйдут за 2 килобайта
Следующим шагом видится использование полнотекстовых средств в СУБД. Теги можно сохранить в разном формате. Например, с разделителями в подобии XML или в JSON.
Определившись с данными моделями, посмотрим на их количественные характеристики
Самая первая характеристика – время вставки. Как мы видим по скорости выигрывает значительно реляционная модель. В целом ничего удивительно. Id тегов разово зачитаны в кэш, а дальше идёт lookup их id и вставка.
Худший вариант на удивление не полнотекстовый, а со сложными типами данных, но я подозреваю, что это нюансы Оракла, а проверить на постгрес я не успевал. Скорее всего ситуация будет иная.
Посмотрим, что у нас получается с точки зрения места.
Важно обратить внимание, что в целом модели с точки зрения места примерно равны. Огромной разницы не наблюдается. Разница наблюдается только в пропорции Данные/Индекс. Также стоит обратить внимание, что в целом 8 миллионов тегов занимают более чем скромный объем места, что говорит об уместности inmemory баз данных для данной задачи.
Собственно запросы поиска по ID по каждой модели абсолютно понятны
Собственно тут более позновательны результаты, так как в случае денормализованных/нормализованных моделе возвращается набор строк, а полнотекстовой/сложных типов – одну строку
Запомните это – все запросы помещаются на одну страницу
В целом я показал время до и после прогрева кэшей СУБД, но в целом я бы сконцентрировался после прогрева. Тут явным фаворитом является полнотекстовая модель, так как не требует вообще никаких дополнительных действий для извлечения информации.
Я даже специально разместил их на разных диаграммах, так как порядки скоростей очень сильно отличаются
Из-за нюансов того, как в оракле организованы сложные типы данных, по которым можно индексировать очевидно, что денормализованная и модель со сложными типами данных совпадают.
На одном теге уже начинает проявляться разница. Само собой, она уже сильно зависит от СУБД.
В целом, возможны различные формы написания запроса в денормализованной и нормализованной форме для одного тэга, например с exists или in, но уже по количеству строк видно, что ситуация весьма тяжела
Собственно для сложных типов данных и для полнотекстового поиска запросы очень читаемы
Вообще то, возможно следовало усложнить данный тест искав по тегу с более чем средним количество, менее чем средним, да ещё и добавив бы пейджинг с выводом первой страницы, и, например, третьей, но я не думаю, что от этого много что изменится с точки зрения пропорций.
Как всегда полнотекстовый поиск показывает весьма неплохие результаты.
Итак, начинается самое интересное.
2 тега в поиске. Обратите внимание, что это AND – мы оч.ень плавно подходим к идее faceted search, поэтому очевидный на первый взгляд OR не подходит
Уже два запроса не помещаются на слайд.
Собственно с денормализованным подобная же штука
Однако, если у вас в команде завёлся редкий зверь, знающий SQL, больше чем ORM, то у вас появится что-то гораздо менее читаемое, но эффективное. Тут вся магия показана на count, так как нам надо имитировать and условие не джоиня одну таблицу множество раз
Нормальный оптимизатор буквально вытягивает этот план и запрос работает более чем быстро
Более того, этот запрос очень удобен для кодогенерации
В целом такой же трюк проделывается с денормализованной таблицей
Полнотекстовые запросы и запросы со сложными типами данных очень простые.
Полнотекстовый в оракле очень выразительный – мы условие пишем прямо внутри запроса
Чем больше тегов в условиях, тем грустнее и грустнее поиску на реляционной модели данных. В общем как мы видим, деградация порядка 50 раз, тогда как у полнотекстового растёт пропорциональн количеству тегов в запросе.
Собственно особо cloud tag никто на лету не собирает – его предрасчитывают, но мы попробуем для общего развития
Для реляционной модели можно выкинуть табличку Document, так как она в целом нам не нужна для расчёта количества
Денормализованная как всегда очевидна
С точки зрения полнотекстовых чуть сложнее, ибо придётся их либо раскрыть, либо попарсить json
Давайте что-ли перед переходом к выводам по cloud tag посмотрим что же было популярно в те года.
Каковы ваши ставки – какие теги будут на первых трёх местах?
Итак, с небольшим отрывом лидирует C#!
Ожидаемо по тегам реляционные модели быстрее чем полнотекстовые
Итак, подытожим. Если вам надо искать в реляционной базе медленно, но вы можете смириться с медленной вставкой, то ваш выбор – полнотекстовые индексы, но будьте готовы к их глюкам. Хотите жизни +- без проблем старое доброе денормализованное решение – чёткий середнячёк.
Казалось бы, пора завершить, но где же рассказ как сделано у нас и о том, как же надо?
Итак, расскажу как сделан поиск в одном из наших программных продуктов. Это архитектура система полуавтоматизированной обработки финансовой документации. Архитектура системы стандартна для Enterprise. Клиент, балансировщик, 2 сервера приложений для расчёта бизнес-логики, база данных Oracle и её резервный экземляр.
Мы очень хотели дополнить архитектуру сервером полнотекстового поиска, но Заказчик отказался, поэтому было принято делать решение по поиску на стороне базы данных.
Итак, какие у нас сейчас цифры. Посмотрим на них уже в знакомом формате.
Обратите внимание, если на stackoverflow мы за 4 года набрали 3 миллиона, то мы за 2 года набрали 3, т.е. Интенсивность тегирования у нас где-то в 2 раза больше. Важно понимать, что в нашей системе у нас гибрид между таксономией и фолксономией. При создании объектов создаётся ряд тегов в зависимости от типа объекта, а далее пользователи могу его тегировать сами исходя из бизнес-ситуаций либо произвольными тегами, либо набором значений.
Если обобщить все показатели у нас где-то в 3 раза больше чем у StackOverflow
В целом, система в части теггинга устроена архитектурно очевидно. Есть веб-сервис, которым пользуются другие сервисы, BPM система и собственно. Всего у нас в системе около 40 сервисов, при этом 5 из них пользуются теггинг сервисом в части поиска и наверное 10 в части вставки.
В целом все сервисы кроме UI создают очень простые запросы к теггинг сервису. В основном это выборки по условию AND, где задействовано 3-5 тегов и они работают очень быстро в целом не создавая никаких проблем.
Таких простых запросов у нас где-то 3000 в секунду, в то время как 7000 это запросы от UI.
Как я уже говорил ранее UI большей частью определяет архитектуру решения по теггинг сёрчу. Собственно все тонкие штуки, которые мы использовали появились из-за постоянного усложнения UI хотелками пользователей. К сожалению, я не могу показать скриншот из реального приложения по понятным причинам, но сейчас интерфейс схематически выглядит примерно так.
Собственно Search template применяюся по-умолчанию к любому поиску, в текстовое поле можно вбить текст, по вхождению которого фильтруются теги. Также в верхней панели можно выбрать набор пользователей, которые меняли теги и набрать теги, которые если присутствуют в объекте, но объекты надо исключить.
Слева находится собственно окно фацентной навигации
Посмотрим как эволюционировала база данных, чтобы поддержать такой интерфейс
Мы изначала думали, что пойдём как нормальные люди с хранением тегов в JSON, их парсингом и полнотекстовым поиском как в модели 4, поэтому первый этап решения был такой.
В целом оно проработало в таком режиме 2 месяца и никаких проблем не было. Однако, через 2 месяца бизнес сказал, что хочет иметь типизированые тэги
потому что столкнулся с проблемами неправильных именований и удобством использования.
Казалось бы в чем проблема, но начались проблемы, связанные с полнотекстовыми индексами по JSON в Oracle 12.1
При дополнительной фильтрации по типам не всегда стал учитываться индекс
Соответственно мы добавили таблицу типов и продолжили хранить джейсон, ибо было много типов тегов, где даже в рамках одного типа использовался набор тегов
Запросы со стороны клиентского приложения становились более сложными и разработчики попросили сделать view, в котором теги были бы уже распаршенены, так как возможностей ораклового полнотекстового индекса в 12.1 не хватало. В целом, индексы продолжали работать, но уже на 20% запросов не подхватывались.
Скажем так, на оракл 12.2 таких бы проблем не было, но возможности обновить версию субд не было.
Собственно чтобы решить проблему того, что запросы отпрабатывают по секунде мы решили отложить их оптимизацию на более поздний срок, но статистику по faceted navigation пересчитывать асинхронно после того, как пользователь выбрал фацеты для поиска, а не одновременно с поиском. Как результат через 1 секунду появляются результаты поиска, а новые цифры с учётом выбранного появляются секунды через 3.
Мы обратили внимание, что началась снижаться скорость вставки и иногда стали подтормаживать запросы. В целом скорости хватало, пока деградация по вставке не достигла 20% и очень часто стал медленно работать сам теггинг сёрч.
Заглянув в базу данных мы увидели набор функционально-ориентированных индексов, причём ряд из них был ещё и Bitmap-индексами, которые весьма драматично влияют на вставку в OLTP-системах.
Эти индексы были построены для выпаршивания определённых тэгов и аналитки по ним, причём запросы создавал Looker более чем сложные
Вскрылось, что на тэгах делается множество отчётов BI-командой
Поэтому мы сделали для аналитиков денормализованные датамарты в нашем хранилище, в который данные перемещали etl-джобами
А потом наши пользователи захотели смотреть историю по тегам, причем распределение сейчас таково, что 20% тегов неактивно
Собственно появилсь поля для хранения истории, что замедлило поиск с учётом того, что 20% лишнее.
В очередной раз к нам пришли пользователи и им понадобился набор функционала, на котором текущее решение стало весьма медленным.
Такие вещи как поиск по тегам с OR, возможность исключения объектов при наличии определённых тегов, добавление к условиям поиска по тегам «последнего изменившего» пользователя, фацетная навигация и пейджинг роняли производительность где-то процентов на 40. Если вы помните запросы к моделям данных, то запрос на поиск по тегам занимал на данном этапе около листа А4.
Наступало время релиза и было принято решение денормализовать таблицу тегов к варианту 2, который мы рассматривали в самом начале нашей презентации, чтобы исключить влияние парсинга джейсона и боли с полнотекстовыми индексами в версии 12.1. Так как джаву времени не оставалось менять в части вставки, то сделали триггер, поменяли view , снесли полнотекстовые индексы и исключили специфичный код для учёта их нюансов.
Ну и как видно появилась таблица со списком фацетов
Что важно – в таблице тегов для поиска лежат только текущие активные теги без истории
Собственно после релиза мы сделали следующее – убрали триггер и сделали денормализацию на application server-е,
Убрали забосы к вьюхе и написали выделенные запросы прямо на таблицу, а главное, проанализировали по каким комбинациям тегов чаще всего идёт поиск и также их денормализовали. По 2 всё же пришлось построить полнотекстовый индекс, но в нём отсутствовали проблемы характерные для JSON индексов, поэтому он проблем нам не доставляет.
Хотелось бы ещё остановится на индексе, игры с которыми нам тоже дали прирост в скорости.
Основной индекс выглядит и занимает примерно 4 гигабайта. Вроде бы немного и этим можно принебречь, но попробуем не только уменьшить размер индекса, но и получить некий прирост производительности. Для этого используем компрессию индексов.
Суть компрессированого индекса состоит в том, что для повторяющихся значений составных полей создаётся префиксная таблица, а в блоке данных хранятся указатели на данную таблицу. Из-за этого индекс занимает меньше места, меньше уходит операций ввода-вывода, но растёт нагрузка на CPU и незначительно уменьшается скорость вставки.
Compress 2 говорит о том, что для полей object_type_id и tag_type_id будет создана префиксная таблица, а так как эти поля совпадают у множества строк, то мы получим серьёзную экономию
В цифрах мы получили серьёзную экономию места, но главное поиск ускорился на 6% фактически забесплатно.
Если суммировать, то проблемы были решены через асинхронный пользовательский интерфейс, денормализованную модель в реляционной бд, обычные индексы с префиксами, чтобы занимать меньше места и полнотекстовые индексы только для поиска по 2-м тегам. Когда идёт совместный поиск Oracle делает порой весьма эффективную операцию index combine и запросы весьма эффективны.
Как бы я оценил наше решение? Ну наверное так – ездит на самом деле быстро, но требует усилий, чтобы не упасть.
Собственно у нас много планов на будущее.
Например, в последней версии Оракла 18с появился встроенный в их полнотекстовый сервер функционал фацетной навигации. Не знаю пока, насколько он быстр и безопасен при реальных объёмах, но мы обязательно его изучим.
Он позволяет указать, в каких тегах лежат данные по каким фацетам и осуществлять поиск по ним с возвратом агрегатов. На малых объемах это работает весьма резво, на больших руки не дошли проверить.
Вначале создаем объект для хранения фацетов,
Пото задаем правила извлечения фацетов из текста и их типы данных,
а потом по каким будет идти поиск в соответствии со сценарием
Практически уверен, что Postgres, который очень любит копировать, воплотит это скоро.
Далее есть 2 варианта
Использовать гибкую структуру с тегами и предыдущих настроек будет достаточно чтобы создать индекс на основе фацетов, указанных на предыдущей странице
Видите, поля в xml совпадают с настройками фацетов
Либо испозовать плоскую таблицу с небольшими ухищрениями, где мы указываем, что поля для фацетов лежат в реляционной структуре, ну а после этого создаём индекс как обычнос использованием маппинга
Собственно выполняем поиск в нашем индексе по ключевому слову, указав, какие нам нужны фацеты на выходе
Ну и собственно обратите внимание, что для каждой группы можно задавать свои параметры сортировки и прочего
И получаем наши фацеты с агрегатами с xml в соответствии с заданными ранее параметрами.
Выглядит весьма многообещающе, но на реальных объемах данных, с учётом постоянной вставки и изменения данных в таблицы, а также что пользователей много я ещё не проверял.
Ситуация может радикально поменяться.
Встроенный в Oracle фацетный поиск выглядит круто, но возможно и не взлетит, а у нас пока что нет времени, на переход на красивые и правильные архитектуры, тем не менее хочется быть всё быстрее. Итак, на самом деле мы уже почти на максимальном уровне того, что можно вытащить из текущей архитектуры.
Сейчас мы находимся на этапе проверки как же текущую модель данных с минимальными переделками может ускорить Oracle In-Memory и в целом у нас это получается
В целом у нас получилось ценой финансовых вливаний в лицензии и где-то недели времени работы получить ускорение где-то в 4 раза и новые цифры теперь выглядят так
В целом я буду рассказывать про то, как же нам это удалось на In-Memory Summit в этом году и если приложу усилия, то и на Highload++, так как уже сейчас предложенный доклад вызвал живой интерес.
Исходя из нашего опыта мы делаем вывод, что полнотекстовые сервера это хорошо и правильно, но они не должны быть расположены в базе данных, так как возникали проблемы с их производительностью, более медленной реакцией саппорта на баги и линейной деградацией при увеличении тегов в запросах.
Рассмотрим поиск по тегам с использованием Apache Solr. Почему Солр, а не эластик? Ну я просто его люблю и в нём есть встроенный язык для фацентной навигации
Мы будем испольовать режим работы солра со схемой и будем работать с данными, хранимыми следующим образом в файле magaged-schema.xml
Сообзазно указанной ранее схеме tags это массив из строк тегов. Я не стал его делать просто текстом, чтобы не усложнять. Фактически на solr мы делаем модель со сложными типами данных
Я взял те же самые тестовые данные, что и в примере с реляционными базами данных, но занизил память и процессоры в 2 раза
И проверим в Солре наши ключевые запросы
Поиск по идентификатору
Поиск по одному тегу с сортировкой, фильтрацией и пейджингом. Обратите внимание, что время подскачило весьма ощутимо, но в целом очень приемлемо, особенно с учётом того, что есть сортировка
Убедимся, что добавление нескольких тегов не приводит к деградации производительности, что очень существенно
Ну и в итоге попробуем создать облако тегов с использованием упрощённого варианта языка фацетов
Для фацетов уже нет UI, поэтому запрос я собрал в адресной строке. В целом, в данном синтаксисе можно уже добавить группы по категориям аналогично как мы делали в Oracle и facets будут считаться по ним.
Что важно, что время всё равно очень быстрое
Кстати, вам не кажется, что что-то странное произошло с облаком?
Да, си шарп превратился в си, потому что надо так настроить токенайзер, чтобы он его не обрезал шарп
Так как синтаксис фацетов очень обширен, то сейчас запросы для фацетной нафигации принято делать в JSON, который SOLR прекрасно обрабатывает.
Например, интервальные фацеты по 2 категориям в старом синтаксисе были конечно понятливы, но в новом гораздо более структурированы.
В общем то это показывает, что решения на базе полнотекстовых серверов являются оптимальными для поиска по тегам и фацетной навигации как по численным показателям, но и по выразительности запросов
Кстати, хочу заметить, что для примера со StackOverflow я интереса ради разворачивал кластер из 2-х нод с равномерным распределением коллекции по кластеру. В целом радикально быстрее не стало, разница была около 10%, скорее всего он себя проявит в многопользовательском режиме.
В целом, можно найти много примеров очень продвинутых архитектур для фацетного поиска, но сложные архитектуры чаще всего диктуются предметной областью и требуют отдельного доклада. Подозреваю, что-то подобное мы увидим сегодня в 17:00 на докладе «Эволюцию поиска AVITO», но это уже другая история...
Не верьте в универсальные решения – померьте скорость на ваших тегах и на ваших сценариях, всё может быть по-иному
Верьте в вашу систему базы данных, неважно реляционная она или полнотекстовая – использование уникальных возможностей позволит съэкономить кучу времени на разработку
Придётся разобраться, как фишки работают изнутри. Составные типы данных в оракле и как в Солре Си шарп превратился в Си превосходные примеры для этого.
Выберите лучшую модель от того, что у вас есть
Если у вас не будет нагрузки StackOverflow и Instagram, а сценарий использования как у них – не тратьте время, решения на базе реляционной базы данных более чем эффективно работают
Если у вас есть сложные запросы, особенно от пользователей или фацетная навигация используйте полнотекстовые решения. На самом деле, я видел для фацетной навигации и самостоятельные решения на том же in memory grid oracle coherence, но мне они кажутся переусложнёнными
7. Поиск не равен аналитике