mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 15:42:02 +00:00
518 lines
21 KiB
HTML
518 lines
21 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8"/>
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
||
|
||
<title>ClickHouse — open-source distributed column-oriented DBMS</title>
|
||
|
||
<link rel="shortcut icon" href="favicon.ico"/>
|
||
|
||
<meta property="og:title" content="ClickHouse DBMS"/>
|
||
<meta property="og:description" content="ClickHouse is an open-source column-oriented database management system that allows generating analytical data reports in real time."/>
|
||
<meta property="og:type" content="website"/>
|
||
|
||
<meta property="twitter:title" content="ClickHouse DBMS"/>
|
||
|
||
<meta name="description" content="ClickHouse is an open-source distributed column-oriented database management system that allows generating analytical data reports in real time. Сreated by Yandex ClickHouse manages extremely large volumes of data in a stable and sustainable manner."/>
|
||
<meta name="keywords" content="ClickHouse, DBMS, OLAP, relational, analytics, analytical, big data, open-source, SQL, web-analytics"/>
|
||
|
||
<style type="text/css">
|
||
@font-face {
|
||
font-family: 'Yandex Sans Text Web';
|
||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot);
|
||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
|
||
url(https://yastatic.net/adv-www/_/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
|
||
url(https://yastatic.net/adv-www/_/pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
|
||
url(https://yastatic.net/adv-www/_/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
|
||
url(https://yastatic.net/adv-www/_/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
|
||
font-weight: 700;
|
||
font-style: normal;
|
||
font-stretch: normal
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'Yandex Sans Text Web';
|
||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
|
||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
|
||
url(https://yastatic.net/adv-www/_/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
|
||
url(https://yastatic.net/adv-www/_/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
|
||
url(https://yastatic.net/adv-www/_/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
|
||
url(https://yastatic.net/adv-www/_/gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
|
||
font-weight: 400;
|
||
font-style: normal;
|
||
font-stretch: normal
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'Yandex Sans Text Web';
|
||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot);
|
||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
|
||
url(https://yastatic.net/adv-www/_/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
|
||
url(https://yastatic.net/adv-www/_/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
|
||
url(https://yastatic.net/adv-www/_/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
|
||
url(https://yastatic.net/adv-www/_/EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
|
||
font-weight: 300;
|
||
font-style: normal;
|
||
font-stretch: normal
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'Yandex Sans Display Web';
|
||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot);
|
||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
|
||
url(https://yastatic.net/adv-www/_/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
|
||
url(https://yastatic.net/adv-www/_/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
|
||
url(https://yastatic.net/adv-www/_/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
|
||
url(https://yastatic.net/adv-www/_/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
|
||
font-weight: 400;
|
||
font-style: normal;
|
||
font-stretch: normal
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'Yandex Sans Display Web';
|
||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
|
||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
|
||
url(https://yastatic.net/adv-www/_/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
|
||
url(https://yastatic.net/adv-www/_/40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
|
||
url(https://yastatic.net/adv-www/_/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
|
||
url(https://yastatic.net/adv-www/_/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
|
||
font-weight: 300;
|
||
font-style: normal;
|
||
font-stretch: normal
|
||
}
|
||
|
||
body {
|
||
background: #fff;
|
||
font: 300 12pt/200% 'Yandex Sans Text Web', Arial, sans-serif;
|
||
}
|
||
|
||
.page {
|
||
width: 800px;
|
||
margin: auto;
|
||
}
|
||
|
||
h1 {
|
||
font: 400 100pt 'Yandex Sans Display Web', Arial, sans-serif;
|
||
margin: 100px 0 30px;
|
||
}
|
||
|
||
h2 {
|
||
margin: 47px 0 23px;
|
||
font: 400 24pt 'Yandex Sans Display Web', Arial, sans-serif;
|
||
}
|
||
|
||
a:link, a:visited {
|
||
color: #08f;
|
||
text-decoration: none;
|
||
}
|
||
|
||
a:hover, a:active {
|
||
color: #f00;
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.menu {
|
||
margin: 0 0 50px;
|
||
font-weight: 400;
|
||
}
|
||
|
||
.menu_item:link,
|
||
.menu_item:active,
|
||
.menu_item:visited {
|
||
margin: 0 8px 0 0;
|
||
|
||
padding: 5px;
|
||
background: #ffdb4d;
|
||
color: #000;
|
||
}
|
||
|
||
.menu_item:hover {
|
||
background: #f80;
|
||
color: #fff;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.short_description,
|
||
.call_to_action {
|
||
font: 300 18pt/150% 'Yandex Sans Display Web', Arial, sans-serif;
|
||
margin: 6px 0 24px;
|
||
}
|
||
|
||
.call_to_action {
|
||
color: #07f;
|
||
font-weight: 400;
|
||
}
|
||
|
||
.download_div {
|
||
margin: 80px;
|
||
text-align: center;
|
||
}
|
||
|
||
.download:link,
|
||
.download:active,
|
||
.download:visited {
|
||
background: #ffdb4d;
|
||
font: 300 18pt 'Yandex Sans Display Web', Arial, sans-serif;
|
||
padding: 15px 22px;
|
||
margin: auto;
|
||
color: #000;
|
||
text-decoration: none;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.download:hover {
|
||
color: #f00;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.footer {
|
||
text-align: right;
|
||
padding: 10px 0 0;
|
||
color: #888;
|
||
font-size: 10pt;
|
||
}
|
||
|
||
.feedback_form {
|
||
position: absolute;
|
||
}
|
||
|
||
.feedback_form, .download_instructions {
|
||
display: none;
|
||
background: #fff;
|
||
padding: 20px;
|
||
box-shadow: 10px 10px 300px 350px #fff;
|
||
}
|
||
|
||
code {
|
||
font: 13px/18px monospace, "Courier New";
|
||
display: block;
|
||
border-left: 5px solid #ffdb4d;
|
||
padding: 5px 10px;
|
||
background: #000;
|
||
color: #ccc;
|
||
}
|
||
|
||
ul {
|
||
margin: 0;
|
||
padding-left: 0;
|
||
}
|
||
|
||
ul.dashed {
|
||
list-style-type: none;
|
||
}
|
||
|
||
ul.dashed > li {
|
||
text-indent: 5px;
|
||
}
|
||
|
||
ul.dashed > li:before {
|
||
content: '— ';
|
||
text-indent: 5px;
|
||
}
|
||
|
||
.warranty {
|
||
font-size: 10pt;
|
||
color: #888;
|
||
line-height: 150%;
|
||
}
|
||
|
||
.nomarkerlist {
|
||
list-style-type: none;
|
||
}
|
||
|
||
.distributive_selected {
|
||
color: #000;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.distributive_not_selected {
|
||
color: #08f;
|
||
cursor: pointer;
|
||
border-bottom: 1px dashed #08f;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="page">
|
||
|
||
<h1>ClickHouse</h1>
|
||
|
||
<div class="feedback_form">
|
||
<h2>Feedback</h2>
|
||
<p>Ask any questions on <a href="https://stackoverflow.com/questions/tagged/clickhouse">Stack Overflow</a>.</p>
|
||
<p>Use <a href="https://groups.google.com/group/clickhouse">Google Group</a> for discussion.</p>
|
||
<p>Or send private message to developers: <a href="mailto:clickhouse-feedback@yandex-team.com">clickhouse-feedback@yandex-team.com</a>.</p>
|
||
<p>Discuss with real users in Telegram chat in <a href="https://telegram.me/clickhouse_en">English</a> or in <a href="https://telegram.me/clickhouse_ru">Russian</a>.</p>
|
||
<p class="warranty">Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,<br /> either express or implied.</p>
|
||
</div>
|
||
|
||
<p class="short_description">ClickHouse is an open-source column-oriented database management system that allows generating analytical data reports in real time.</p>
|
||
|
||
<div class="menu">
|
||
<a class="menu_item" href="reference_en.html">Documentation</a>
|
||
<a class="menu_item" href="tutorial.html">Quick start</a>
|
||
<a class="menu_item" href="#download" id="download_menu_item">Download</a>
|
||
<a class="menu_item" href="https://github.com/yandex/ClickHouse">Source</a>
|
||
<a class="menu_item" href="benchmark.html">Benchmark</a>
|
||
<a class="menu_item" href="#feedback" id="feedback">Feedback</a>
|
||
</div>
|
||
|
||
<p>ClickHouse manages extremely large volumes of data in a stable and sustainable manner. It currently powers <a href="https://metrica.yandex.com/">Yandex.Metrica</a>, world’s <a href="http://w3techs.com/technologies/overview/traffic_analysis/all">second largest</a> web analytics platform, with over 20.3 trillion database records and over 20 billion events a day, generating customized reports on-the-fly, directly from non-aggregated data. This system was successfully implemented at <a href="https://www.yandex.com/company/press_center/press_releases/2012/2012-04-10/">CERN’s LHCb experiment</a> to store and process metadata on 10bn events with over 1000 attributes per event registered in 2011.</p>
|
||
|
||
|
||
<h2>ClickHouse. Just makes you think faster.</h2>
|
||
|
||
<ul class="dashed">
|
||
<li>Run more queries in the same amount of time</li>
|
||
<li>Test more hypotheses</li>
|
||
<li>Slice and dice your data in many more new ways</li>
|
||
<li>Look at your data from new angles</li>
|
||
<li>Discover new dimensions</li>
|
||
</ul>
|
||
|
||
|
||
<h2>Linearly scalable</h2>
|
||
|
||
<p>ClickHouse allows companies to add servers to their clusters when necessary without investing time or money into additional DBMS modification. The system has been successfully serving <a href="https://metrica.yandex.com/">Yandex.Metrica</a>, while the servers just in its main cluster, located in six geographically distributed datacenters, have grown from 60 to 394 in two years.</p>
|
||
|
||
<p>ClickHouse scales well both vertically and horizontally. ClickHouse is easily adaptable to perform both on hundreds of node clusters, and on a single server or even virtual machine. It currently has installations with more than two trillion rows per single node, as well as installations with 100 TB of storage per single node.</p>
|
||
|
||
|
||
<h2>Hardware-efficient</h2>
|
||
|
||
<p>ClickHouse processes typical analytical queries two to three orders of magnitude faster than traditional row-oriented systems with the same available IO throughput. The system’s columnar format allows fitting more hot data in the server’s RAM, which leads to a shorter response time.</p>
|
||
|
||
<p>ClickHouse allows to minimize number of seeks for range queries, which increases efficiency of using rotational drives, as it maintains locality of reference for stored data continually.</p>
|
||
|
||
<p>ClickHouse is CPU efficient because of its vectorized query execution and runtime code generation.</p>
|
||
|
||
<p>By minimizing data transfers for most types of queries, ClickHouse enables companies to manage their data and create reports without using a network that supports high-performance computing.</p>
|
||
|
||
|
||
<h2>Fast</h2>
|
||
|
||
<p>ClickHouse’s performance <a href="benchmark.html">exceeds</a> comparable column-oriented DBMS currently available on the market. It processes hundreds of millions to more than a billion rows and tens of gigabytes of data per single server per second.</p>
|
||
|
||
<p>ClickHouse uses all available hardware to its full potential to process each query as fast as possible. The peak processing performance for a single query (after decompression, only used columns) stands at more than 2 terabytes per second.</p>
|
||
|
||
|
||
<h2>Fault-tolerant</h2>
|
||
|
||
<p>ClickHouse supports multi-master asynchronous replication and can be deployed across multiple datacenters. Downtime of a single node or the whole datacenter won’t affect the system’s availability for reads and writes. Distributed reads are automatically balanced to live replicas without increasing latency. Replicated data are synchronized automatically or semi-automatically after the downtime.</p>
|
||
|
||
|
||
<h2>Feature-rich</h2>
|
||
|
||
<p>ClickHouse features a number of built-in user-friendly web analytics capabilities, including probabilistic data structures for fast and memory-efficient calculation of cardinalities and quantiles, or functions for addressing URLs and IPs (both IPv4 and IPv6) as well as identifying dates, times and time zones.</p>
|
||
|
||
<p>Data management methods available in ClickHouse, such as arrays, array joins and nested data structures, are extremely efficient for managing denormalized data.</p>
|
||
|
||
<p>Using ClickHouse allows joining both distributed data and co-located data, as the system supports local joins and distributed joins. It also offers an opportunity to use external dictionaries, dimension tables loaded from an external source, for seamless joins.</p>
|
||
|
||
<p>ClickHouse supports approximate query processing – you can get results as fast as you want, which is indispensable when dealing with terabytes and petabytes of data.</p>
|
||
|
||
<p>The system’s conditional aggregate functions, calculation of totals and extremes, allow getting results with a single query without having to run a number of them.</p>
|
||
|
||
|
||
<h2>Simple and handy</h2>
|
||
|
||
<p>ClickHouse is simple and works out-of-the-box. As well as performing on hundreds of node clusters, this system can be easily installed on a single server or even a virtual machine. No development experience or code-writing skills are required to install ClickHouse.</p>
|
||
|
||
|
||
<h2>Highly reliable</h2>
|
||
|
||
<p>ClickHouse has been managing petabytes of data serving a number of high-load mass-audience services of Russia’s leading search provider and one of Europe’s largest IT companies, <a href="https://www.yandex.com/company/">Yandex</a>. Since 2012, ClickHouse has been providing robust database management for the company’s <a href="https://metrica.yandex.com/">web analytics service</a>, comparison shopping platform, email service, online advertising platform, business intelligence and infrastructure monitoring.</p>
|
||
|
||
<p>ClickHouse is purely distributed system located on independent nodes, which has no single point of failure.</p>
|
||
|
||
<p>Software or hardware failures or misconfigurations do not result in loss of data. Instead of deleting "broken" data, Clickhouse saves it or asks you what to do before a startup. All data are checksummed before every read or write to disk or network. It is virtually impossible to delete data by accident.</p>
|
||
|
||
<p>ClickHouse offers flexible limits on query complexity and resource usage, which can be fine-tuned using settings. It is possible to simultaneously serve both a number of high priority low-latency requests and some long-running queries with lowered priority.</p>
|
||
|
||
|
||
<h2>Opens new possibilities</h2>
|
||
|
||
<p>ClickHouse streamlines all your data processing. It’s easy to use: ingest all your structured data into the system, and it is instantly available for reports. New columns for new properties or dimensions can be easily added to the system at any time without slowing it down.</p>
|
||
|
||
<p>ClickHouse works <a href="benchmark.html">100-1,000x faster</a> than traditional approaches. In contrast to data management methods, where vast amounts of raw data in its native format are available as a ‘data lake’ for any given query, ClickHouse, in most cases, offers instant results: the data is processed faster than it takes to make a query.</p>
|
||
|
||
|
||
<table width="100%">
|
||
<tr>
|
||
<td valign="top">
|
||
<h2>Key Features</h2>
|
||
|
||
<ul class="dashed">
|
||
<li>True column-oriented</li>
|
||
<li>Vectorized query execution</li>
|
||
<li>Data compression</li>
|
||
<li>Parallel and distributed query execution</li>
|
||
<li>Real-time data ingestion</li>
|
||
<li>On-disk locality of reference</li>
|
||
<li>Real-time query processing</li>
|
||
<li>Cross-datacenter replication</li>
|
||
<li>High availability</li>
|
||
<li>SQL support</li>
|
||
<li>Local and distributed joins</li>
|
||
<li>Pluggable external dimension tables</li>
|
||
<li>Arrays and nested data types</li>
|
||
<li>Approximate query processing</li>
|
||
<li>Probabilistic data structures</li>
|
||
<li>Full support of IPv6</li>
|
||
<li>Features for web analytics</li>
|
||
<li>State-of-the-art algorithms</li>
|
||
<li>Detailed documentation</li>
|
||
<li>Clean documented code</li>
|
||
</ul>
|
||
</td>
|
||
<td valign="top">
|
||
<h2>Applications</h2>
|
||
|
||
<ul class="dashed">
|
||
<li>Web and App analytics</li>
|
||
<li>Advertising networks and RTB</li>
|
||
<li>Telecommunications</li>
|
||
<li>E-commerce</li>
|
||
<li>Information security</li>
|
||
<li>Monitoring and telemetry</li>
|
||
<li>Business intelligence</li>
|
||
<li>Online games</li>
|
||
<li>Internet of Things</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<div class="download_div">
|
||
<a class="download" href="#" id="download_big_button">Download</a>
|
||
</div>
|
||
|
||
<div class="download_instructions">
|
||
<h2>Download</h2>
|
||
|
||
<p>System requirements: Linux, x86_64 with SSE 4.2.</p>
|
||
|
||
<p>Install packages for
|
||
<span class="distributive_not_selected" id="ubuntu_xenial">Ubuntu 16.04 (Xenial)</span> or <span class="distributive_selected" id="ubuntu_trusty">Ubuntu 14.04 (Trusty)</span> or <span class="distributive_not_selected" id="ubuntu_precise">Ubuntu 12.04 (Precise)</span>:
|
||
</p>
|
||
|
||
<code>
|
||
<pre>
|
||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4 # optional
|
||
|
||
sudo mkdir -p /etc/apt/sources.list.d
|
||
echo "deb http://repo.yandex.ru/clickhouse/<span id="distributive">trusty</span> stable main" |
|
||
sudo tee /etc/apt/sources.list.d/clickhouse.list
|
||
sudo apt-get update
|
||
|
||
sudo apt-get install clickhouse-server-common clickhouse-client
|
||
|
||
sudo service clickhouse-server start
|
||
clickhouse-client
|
||
</pre>
|
||
</code>
|
||
|
||
<p>Read the <a href="reference_en.html">documentation</a>.</p>
|
||
|
||
<p>Or build ClickHouse from <a href="https://github.com/yandex/ClickHouse">sources</a> according to the <a href="https://github.com/yandex/ClickHouse/blob/master/doc/build.md">instruction</a>.</p>
|
||
|
||
</div>
|
||
|
||
<p class="footer">© 2016–2017 <a href="https://yandex.com/company/">YANDEX</a> LLC</p>
|
||
|
||
<script type="text/javascript">
|
||
|
||
var block_visible = [];
|
||
|
||
function showBlock(class_name) {
|
||
var element = document.getElementsByClassName(class_name)[0];
|
||
element.style.display = 'block';
|
||
document.body.style.backgroundColor = '#888';
|
||
block_visible[class_name] = true;
|
||
}
|
||
|
||
function hideBlock(class_name) {
|
||
var element = document.getElementsByClassName(class_name)[0];
|
||
element.style.display = 'none';
|
||
document.body.style.backgroundColor = 'white';
|
||
block_visible[class_name] = false;
|
||
}
|
||
|
||
document.getElementById('feedback').addEventListener('click', function(e) {
|
||
var class_name = 'feedback_form';
|
||
block_visible[class_name] ? hideBlock(class_name) : showBlock(class_name);
|
||
e.stopPropagation();
|
||
});
|
||
|
||
var show_download_block = function(e) {
|
||
var class_name = 'download_instructions';
|
||
block_visible[class_name] ? hideBlock(class_name) : showBlock(class_name);
|
||
document.getElementById('download_big_button').style.display = 'none';
|
||
if (e) {
|
||
e.stopPropagation();
|
||
e.preventDefault();
|
||
}
|
||
window.scrollTo(0, document.getElementsByClassName(class_name)[0].offsetTop);
|
||
};
|
||
|
||
document.getElementById('download_menu_item').addEventListener('click', show_download_block);
|
||
document.getElementById('download_big_button').addEventListener('click', show_download_block);
|
||
|
||
document.body.addEventListener('click', function(e) {
|
||
var element = e.target;
|
||
while (element !== document.body) {
|
||
if (element.className == 'feedback_form' || element.className == 'download_instructions') {
|
||
return;
|
||
}
|
||
element = element.parentNode;
|
||
}
|
||
hideBlock('feedback_form');
|
||
hideBlock('download_instructions');
|
||
document.getElementById('download_big_button').style.display = 'inline';
|
||
});
|
||
|
||
if (location.hash == "#download") {
|
||
show_download_block();
|
||
}
|
||
|
||
if (location.hash == "#feedback") {
|
||
var class_name = 'feedback_form';
|
||
block_visible[class_name] ? hideBlock(class_name) : showBlock(class_name);
|
||
}
|
||
|
||
var available_distributives = ['xenial', 'trusty', 'precise'];
|
||
|
||
function selectDistributive(name) {
|
||
console.log(name);
|
||
document.getElementById('distributive').innerHTML = name;
|
||
available_distributives.forEach(function(distr) {
|
||
document.getElementById('ubuntu_' + distr).className = (name == distr) ? 'distributive_selected' : 'distributive_not_selected';
|
||
});
|
||
}
|
||
|
||
available_distributives.forEach(function(distr) {
|
||
document.getElementById('ubuntu_' + distr).addEventListener('click', function(e) { selectDistributive(distr); });
|
||
});
|
||
|
||
</script>
|
||
|
||
<!-- Yandex.Metrika counter -->
|
||
<script src="https://mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
|
||
<script type="text/javascript">
|
||
try { var yaCounter18343495 = new Ya.Metrika({id:18343495,
|
||
webvisor:true,
|
||
clickmap:true,
|
||
trackLinks:true,
|
||
accurateTrackBounce:true,
|
||
trackHash:true});
|
||
} catch(e) { }
|
||
</script>
|
||
<noscript><div><img src="https://mc.yandex.ru/watch/18343495" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
|
||
<!-- /Yandex.Metrika counter -->
|
||
|
||
</div>
|
||
</body>
|
||
</html>
|