Added digital integration hub use case and removed old pages adjusting redirects
git-svn-id: https://svn.apache.org/repos/asf/ignite/site/branches/ignite-redisign@1873754 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/.htaccess b/.htaccess
index 22bd815..bf1ef92 100644
--- a/.htaccess
+++ b/.htaccess
@@ -14,6 +14,7 @@
Redirect 301 /features/deploy.html /arch/clustering.html
Redirect 301 /features/igniterdd.html /use-cases/spark/shared-memory-layer.html
Redirect 301 /use-cases/spark/shared-memory-layer.html /use-cases/spark-acceleration.html
+Redirect 301 /use-cases/spark/sql-queries.html /use-cases/spark-acceleration.html
Redirect 301 /use-cases/caching/database-caching.html /use-cases/in-memory-cache.html
Redirect 301 /use-cases/database/in-memory-database.html /use-cases/in-memory-database.html
Redirect 301 /use-cases/database/distributed-database.html /use-cases/in-memory-database.html
@@ -24,6 +25,13 @@
Redirect 301 /features/mapreduce.html /use-cases/hadoop-acceleration.html
Redirect 301 /use-cases/database/key-value-store.html /use-cases/key-value-store.html
Redirect 301 /usecases.html /
+Redirect 301 /use-cases/comparison/ignite-for-rdbms.html /
+Redirect 301 /use-cases/comparison/ignite-for-nosql.html /
+Redirect 301 /features/datagrid.html /use-cases/datagrid.html
+Redirect 301 /use-cases/platforms/dotnet.html /features/multilanguage.html
+Redirect 301 /provenusecases.html /use-cases/provenusecases.html
+Redirect 301 /features/datavisualization.html /features/manageandmonitor.html
+Redirect 301 /addons.html /features.html
RewriteEngine On
diff --git a/download.html b/download.html
index 6fd7f93..204e5d7 100644
--- a/download.html
+++ b/download.html
@@ -127,14 +127,14 @@
onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'distributed_sql');">
Distributed SQL</a>
</li>
- <li><a href="/features/datagrid.html" aria-label="DataGrid"
+ <li><a href="/use-cases/key-value-store.html" aria-label="DataGrid"
onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'distributed_key_value');">
Distributed Key-Value</a>
</li>
- <!--<li><a href="/arch/persistence.html"-->
- <!--onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'persistence');">-->
- <!--Distributed Persistence</a>-->
- <!--</li>-->
+ <li><a href="/arch/persistence.html"
+ onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'persistence');">
+ Native Persistence</a>
+ </li>
<li><a href="/features/transactions.html" aria-label="Transactions"
onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'acid_transactions');">
ACID Transactions</a>
@@ -165,95 +165,73 @@
<!-- Ignite tooling. -->
<li role="presentation" class="submenu-header">Tooling</li>
- <li><a href="/features/datavisualization.html#apache-ignite-web-console" aria-label="Ignite Web Console"
- onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'ignite_web_console');">
- Ignite Web Console</a>
- </li>
- <li><a href="/features/datavisualization.html" aria-label="Data Visualization and Analysis"
- onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'data_visualization');">
- Data Visualization and Analysis</a>
+ <li><a href="/features/manageandmonitor.html" aria-label="Ignite Management & Monitoring"
+ onclick="ga('send', 'event', 'apache_ignite_features', 'menu_click', 'ignite_manage_monitor');">
+ Management & Monitoring</a>
</li>
</ul>
</li>
+
<li class="dropdown" style="cursor: pointer;">
<a class="dropdown-toggle" data-toggle="dropdown" aria-label="Use Cases">Use Cases<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
- <li role="presentation" class="submenu-header">Proven by</li>
- <li><a href="/provenusecases.html" aria-label="Proven Use Cases"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'proven_usecases');">
- Ignite in Production</a>
- </li>
- <li class="divider">
-
- <!--Database-->
- <li role="presentation" class="submenu-header">Data Store</li>
- <li><a href="/use-cases/database/distributed-database.html" aria-label="Data Store"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'distributed-database');">
- Distributed Database</a>
- </li>
- <li><a href="/use-cases/database/in-memory-database.html" aria-label="In-Memory Database"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'distributed-database');">
- In-Memory Database</a>
+ <li role="presentation" class="submenu-header">Caching & Database</li>
+ <li><a href="/use-cases/in-memory-cache.html"
+ aria-label="In-Memory Cache"
+ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'in_memory_cache');">
+ In-Memory Cache</a>
</li>
<li><a href="/features/datagrid.html" aria-label="In-Memory Data Grid"
onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'data_grid');">
In-Memory Data Grid</a>
</li>
- <li><a href="/use-cases/database/key-value-store.html" aria-label="Key-Value Store"
+ <li><a href="/use-cases/in-memory-database.html" aria-label="In-Memory Database"
+ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'distributed-database');">
+ In-Memory Database</a>
+ </li>
+ <li><a href="/use-cases/key-value-store.html" aria-label="Key-Value Store"
onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'key_value_store');">
Key-Value Store</a>
</li>
<li class="divider">
- <!--In-Memory Caching-->
- <li role="presentation" class="submenu-header">In-Memory Cache</li>
- <li><a href="/use-cases/caching/database-caching.html" aria-label="Database Caching"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'database-caching');">
- Database Caching</a>
+ <li role="presentation" class="submenu-header">Data & Compute Hubs</li>
+ <li><a href="/use-cases/hpc.html" aria-label="High-Performance Computing"
+ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'massive_parallel_processing');">
+ High-Performance Computing</a>
</li>
- <li><a href="/use-cases/caching/jcache-provider.html" aria-label="JCache Provider"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'jcache-provider');">
- JCache Provider</a>
+ <li><a href="/use-cases/dih.html" aria-label="Digital Integration Hub"
+ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'digital_integration_hub');">
+ Digital Integration Hub</a>
</li>
- <li><a href="/use-cases/caching/hibernate-l2-cache.html" aria-label="Hibernate L2 Cache"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'hibernate-l2-cache');">
- Hibernate L2 Cache</a>
- </li>
- <li><a href="/use-cases/caching/web-session-clustering.html" aria-label="Web Session Clustering"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'web-session-clustering');">
- Web Session Clustering</a>
- </li>
+
<li class="divider">
- <!-- Comparison -->
- <li role="presentation" class="submenu-header">Comparison</li>
- <li><a href="/use-cases/comparison/ignite-for-nosql.html" aria-label="Ignite for NoSQL Users"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'ignite-for-nosql');">
- Ignite for NoSQL Users</a>
+ <li role="presentation" class="submenu-header">Faster Analytics</li>
+ <li><a href="/use-cases/spark-acceleration.html"
+ aria-label="Apache Spark Acceleration"
+ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'apache_spark_acceleration');">
+ Apache Spark Acceleration</a>
</li>
- <li><a href="/use-cases/comparison/ignite-for-rdbms.html" aria-label="Ignite for RDBMS Users"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'ignite-for-rdbms');">
- Ignite for RDBMS Users</a>
+ <li><a href="/use-cases/hadoop-acceleration.html"
+ aria-label="Hadoop Acceleration"
+ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'hadoop_acceleration');">
+ Apache Hadoop Acceleration</a>
</li>
+
<li class="divider">
- <!--Ignite with Spark-->
- <li role="presentation" class="submenu-header">Ignite with Spark</li>
- <li><a href="/use-cases/spark/shared-memory-layer.html" aria-label="In-Memory Store for Spark"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'shared-memory-layer');">
- In-Memory Store for Spark</a>
- </li>
- <li><a href="/use-cases/spark/sql-queries.html" aria-label="Faster SQL for Spark"
- onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'sql-queries');">
- Faster Sql for Spark</a>
+ <li role="presentation" class="submenu-header">Ignite in Production</li>
+ <li><a href="/provenusecases.html" aria-label="Powered by Ignite"
+ onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'proven_usecases');">
+ Powered by Ignite</a>
</li>
</ul>
</li>
<li class="dropdown" style="cursor: pointer;">
<a class="dropdown-toggle" data-toggle="dropdown" aria-label="Resources">Resources
- <span
- class="caret"></span></a>
+ <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li role="presentation" class="submenu-header">Docs & APIs</li>
<li><a href="#">APIs</a></li>
@@ -302,7 +280,7 @@
<li class="divider"></li>
<li role="presentation" class="submenu-header">Meetups & Events</li>
- <li><a href="/events.html">Ignite Meetups</a></li>
+ <li><a href="/meetup-groups.html">Ignite Meetups</a></li>
<li><a href="/events.html">Upcoming Events</a></li>
</ul>
</li>
diff --git a/images/digital-hub.png b/images/digital-hub.png
new file mode 100644
index 0000000..670ecf6
--- /dev/null
+++ b/images/digital-hub.png
Binary files differ
diff --git a/includes/header.html b/includes/header.html
index 72a3d1a..117d784 100644
--- a/includes/header.html
+++ b/includes/header.html
@@ -128,7 +128,7 @@
onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'massive_parallel_processing');">
High-Performance Computing</a>
</li>
- <li><a href="#TODO" aria-label="Digital Integration Hub"
+ <li><a href="/use-cases/dih.html" aria-label="Digital Integration Hub"
onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'digital_integration_hub');">
Digital Integration Hub</a>
</li>
@@ -150,7 +150,7 @@
<li class="divider">
<li role="presentation" class="submenu-header">Ignite in Production</li>
- <li><a href="/provenusecases.html" aria-label="Powered by Ignite"
+ <li><a href="/use-cases/provenusecases.html" aria-label="Powered by Ignite"
onclick="ga('send', 'event', 'apache_ignite_usecases', 'menu_click', 'proven_usecases');">
Powered by Ignite</a>
</li>
@@ -158,8 +158,7 @@
</li>
<li class="dropdown" style="cursor: pointer;">
<a class="dropdown-toggle" data-toggle="dropdown" aria-label="Resources">Resources
- <span
- class="caret"></span></a>
+ <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li role="presentation" class="submenu-header">Docs & APIs</li>
<li><a href="#">APIs</a></li>
diff --git a/use-cases/comparison/ignite-for-nosql.html b/use-cases/comparison/ignite-for-nosql.html
deleted file mode 100644
index 04651ab..0000000
--- a/use-cases/comparison/ignite-for-nosql.html
+++ /dev/null
@@ -1,198 +0,0 @@
-<!--
- ▄▄▄ ██▓███ ▄▄▄ ▄████▄ ██░ ██ ▓█████ ██▓ ▄████ ███▄ █ ██▓▄▄▄█████▓▓█████
-▒████▄ ▓██░ ██▒▒████▄ ▒██▀ ▀█ ▓██░ ██▒▓█ ▀ ▓██▒ ██▒ ▀█▒ ██ ▀█ █ ▓██▒▓ ██▒ ▓▒▓█ ▀
-▒██ ▀█▄ ▓██░ ██▓▒▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒███ ▒██▒▒██░▄▄▄░▓██ ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
-░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█ ▄ ░██░░▓█ ██▓▓██▒ ▐▌██▒░██░░ ▓██▓ ░ ▒▓█ ▄
- ▓█ ▓██▒▒██▒ ░ ░ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒ ░██░░▒▓███▀▒▒██░ ▓██░░██░ ▒██▒ ░ ░▒████▒
- ▒▒ ▓▒█░▒▓▒░ ░ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░ ░▓ ░▒ ▒ ░ ▒░ ▒ ▒ ░▓ ▒ ░░ ░░ ▒░ ░
- ▒ ▒▒ ░░▒ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ░ ░ ░ ░ ░
- ░ ▒ ░░ ░ ▒ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
- ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
--->
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <link rel="canonical" href="https://ignite.apache.org/use-cases/comparison/ignite-for-nosql.html" />
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Apache Ignite and NoSQL</title>
- <!--#include virtual="/includes/styles.html" -->
-
- <!--#include virtual="/includes/sh.html" -->
-</head>
-<body>
-<div id="wrapper">
- <!--#include virtual="/includes/header.html" -->
-
-
- <main id="main" role="main" class="container">
- <section id="sql-queries" class="page-section">
- <h1 class="first">Ignite for NoSQL Users</h1>
- <div style="padding:0 0 20px 0;">
- <p>
- Apache Ignite as many other NoSQL databases is horizontally scalable, highly available and
- fault-tolerant. Ignite acts as a distributed partitioned hash map making sure that every cluster
- node owns a portion of the overall data set. This way the more cluster nodes you add, the more data
- you can store in the cluster.
- </p>
- <p>
- Ignite can either partition or replicate the data. Unlike <code>REPLICATED</code> mode, where data is
- fully replicated across all nodes in the cluster, in <code>PARTITIONED</code> mode Ignite will
- equally split the data across multiple cluster nodes, allowing for storing TBs of data both in
- <i>memory</i> and on <i>disk</i>.
- </p>
- </div>
-
- <section id="comparison-matrix-section" class="page-section" style="border: none">
- <table class="comparison-matrix" name="comparison-matrix">
- <thead>
- <tr><th>Feature</th><th>NoSQL</th><th>Ignite</th></tr>
- </thead>
- <tbody>
- <tr>
- <td>Scalability</td>
- <td><span class="check-mark">✓</span> horizontal</td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> horizontal</b></td>
- </tr>
- <tr>
- <td>Availability</td>
- <td><span class="check-mark">✓</span> high</td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> high</b></td>
- </tr>
- <tr>
- <td>Consistency</td>
- <td><span class="cross-mark">✗</span> eventual</td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> strong</b></td>
- </tr>
- <tr>
- <td>In-Memory</td>
- <td><span class="cross-mark">✗</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> in-memory store</b></td>
- </tr>
- <tr>
- <td>Persistence</td>
- <td><span class="check-mark">✓</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- <tr>
- <td>SQL</td>
- <td><span class="cross-mark">✗</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- <tr>
- <td>Key-Value</td>
- <td><span class="check-mark">✓</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- <tr>
- <td>Collocated Processing</td>
- <td><span class="cross-mark">✗</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- </tbody>
- </table>
-
- <table class="comparison-matrix-mobile" name="comparison-matrix-sm">
- <thead>
- <tr><th>Scalability</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="check-mark">✓</span> horizontal</span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>horizontal</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Availability</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="check-mark">✓</span> high</span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>high</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Consistency</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="cross-mark">✗</span> eventual</span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>strong</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>In-Memory</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="cross-mark">✗</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>in-memory store</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Persistence</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- <thead>
- <tr><th>SQL</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="cross-mark">✗</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Key-Value</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Collocated-Processing</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">NoSQL</span><span class="right"><span class="cross-mark">✗</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- </table>
- </section>
-
- <p>
- Unlike eventually consistent NoSQL databases, Ignite can operate in a <i>strongly consistent</i> mode,
- guaranteeing the data consistency across all cluster nodes. In addition, ignte supports
- <a href="https://apacheignite.readme.io/docs/transactions">ACID transactions</a> that can span
- multiple keys acrsoss multiple cluster ndoes and partitions.
- </p>
-
- <p>
- The other difference between Ignite and NoSQL databases is that, first, the memory is
- treated as a fully functional storage, not just as a caching layer, like most databases do. Second,
- in addition to
- <a href="/features/datagrid.html">key-value</a> APIs, Ignite supports
- <a href="/features/sql.html">distributed SQL</a> and
- <a href="/features/collocatedprocessing.html">collocated processing</a> approach.
- </p>
- </section>
- </main>
-
- <!--#include virtual="/includes/footer.html" -->
-</div>
-<!--#include virtual="/includes/scripts.html" -->
-</body>
-</html>
diff --git a/use-cases/comparison/ignite-for-rdbms.html b/use-cases/comparison/ignite-for-rdbms.html
deleted file mode 100644
index 8f476ee..0000000
--- a/use-cases/comparison/ignite-for-rdbms.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<!--
- ▄▄▄ ██▓███ ▄▄▄ ▄████▄ ██░ ██ ▓█████ ██▓ ▄████ ███▄ █ ██▓▄▄▄█████▓▓█████
-▒████▄ ▓██░ ██▒▒████▄ ▒██▀ ▀█ ▓██░ ██▒▓█ ▀ ▓██▒ ██▒ ▀█▒ ██ ▀█ █ ▓██▒▓ ██▒ ▓▒▓█ ▀
-▒██ ▀█▄ ▓██░ ██▓▒▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒███ ▒██▒▒██░▄▄▄░▓██ ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
-░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█ ▄ ░██░░▓█ ██▓▓██▒ ▐▌██▒░██░░ ▓██▓ ░ ▒▓█ ▄
- ▓█ ▓██▒▒██▒ ░ ░ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒ ░██░░▒▓███▀▒▒██░ ▓██░░██░ ▒██▒ ░ ░▒████▒
- ▒▒ ▓▒█░▒▓▒░ ░ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░ ░▓ ░▒ ▒ ░ ▒░ ▒ ▒ ░▓ ▒ ░░ ░░ ▒░ ░
- ▒ ▒▒ ░░▒ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ░ ░ ░ ░ ░
- ░ ▒ ░░ ░ ▒ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
- ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
--->
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <link rel="canonical" href="https://ignite.apache.org/use-cases/comparison/ignite-for-rdbms.html" />
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Ignite for RDBMS Users</title>
- <!--#include virtual="/includes/styles.html" -->
-
- <!--#include virtual="/includes/sh.html" -->
-</head>
-<body>
-<div id="wrapper">
- <!--#include virtual="/includes/header.html" -->
-
-
- <main id="main" role="main" class="container">
- <section id="sql-queries" class="page-section">
- <h1 class="first">Ignite for RDBMS Users</h1>
- <div style="padding:0 0 20px 0;">
- <p>
- Apache Ignite does not require you as a skilled RDBMS user to learn new APIs if you want to
- start working with an Ignite cluster. All the data processing and SQL schema definition can
- be accomplished with a familiar SQL syntax. Ignite complies with SQL ANSI-99 standard supporting all
- <b>SQL</b> and <b>DML</b> commands, including SELECT, UPDATE, INSERT, MERGE, DELETE statements and
- distributed joins. It also provides support for a subset of <b>DDL</b> commands relevant for
- distributed SQL databases.
- </p>
- <p>
- Ignite can store data and indexes both in memory and on disk which allows executing distributed SQL
- queries across different memory layers achieving the performance and scale of in-memory computing
- together with the disk durability and strong consistency in one system. If the persistence is disabled,
- Ignite can act as a pure <a href="/use-cases/database/in-memory-database.html">
- in-memory database</a>.
- </p>
- </div>
-
- <section id="comparison-matrix-section" class="page-section" style="border: none">
- <table class="comparison-matrix" name="comparison-matrix">
- <thead>
- <tr><th>Feature</th><th>RDBMS</th><th>Ignite</th></tr>
- </thead>
- <tbody>
- <tr>
- <td>Scalability</td>
- <td><span class="cross-mark">✗</span> vertical</td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> horizontal</b></td>
- </tr>
- <tr>
- <td>Availability</td>
- <td><span class="cross-mark">✗</span> failover only</td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> high</b></td>
- </tr>
- <tr>
- <td>Consistency</td>
- <td><span class="check-mark">✓</span> strong</td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> strong</b></td>
- </tr>
- <tr>
- <td>In-Memory</td>
- <td><span class="check-mark">✓</span> caching only</td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span> in-memory store</b></td>
- </tr>
- <tr>
- <td>Persistence</td>
- <td><span class="check-mark">✓</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- <tr>
- <td>SQL</td>
- <td><span class="check-mark">✓</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- <tr>
- <td>Key-Value</td>
- <td><span class="cross-mark">✗</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- <tr>
- <td>Collocated Processing</td>
- <td><span class="cross-mark">✗</span></td>
- <td class="highlight-ignite-comparison"><span class="check-mark">✓</span></b></td>
- </tr>
- </tbody>
- </table>
-
- <table class="comparison-matrix-mobile" name="comparison-matrix-sm">
- <thead>
- <tr><th>Scalability</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="cross-mark">✗</span> vertical</span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>horizontal</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Availability</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="cross-mark">✗</span> failover only</span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>high</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Consistency</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="check-mark">✓</span> strong</span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>strong</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>In-Memory</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="check-mark">✓</span> caching only</span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span> <b>in-memory store</b></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Persistence</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- <thead>
- <tr><th>SQL</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Key-Value</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="cross-mark">✗</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- <thead>
- <tr><th>Collocated-Processing</th></tr>
- </thead>
- <tbody>
- <tr><td><span class="left">RDBMS</span><span class="right"><span class="cross-mark">✗</span></span></td></tr>
- <tr class="ignite"><td><span class="left"><b>Ignite</b></span><span class="right"><span class="check-mark">✓</span></span></td></tr>
- </tbody>
- </table>
- </section>
-
- <p>
- The main difference between Ignite and traditional relational databases is that, first, the memory is
- treated as a fully functional storage, not just as a caching layer, like most databases do. Second,
- Ignite is horizontally scalable, highly available and supports both
- <a href="/features/datagrid.html">key-value</a> APIs and
- <a href="/features/collocatedprocessing.html">collocated processing</a> approach.
- </p>
-
- <p>
- Check <a href="/features/sql.html">SQL</a> section for more details or start using
- Ignite as a SQL database referring to
- <a href="https://apacheignite-sql.readme.io/docs" target="_blank" rel="noopener">SQL Getting Started Guide</a>.
- Also, learn how Ignite is used for <a href="/use-cases/caching/database-caching.html">
- relational databases acceleration</a>.
- </p>
- </section>
- </main>
-
- <!--#include virtual="/includes/footer.html" -->
-</div>
-<!--#include virtual="/includes/scripts.html" -->
-</body>
-</html>
diff --git a/features/datagrid.html b/use-cases/datagrid.html
similarity index 98%
rename from features/datagrid.html
rename to use-cases/datagrid.html
index cd55387..831dde9 100644
--- a/features/datagrid.html
+++ b/use-cases/datagrid.html
@@ -33,7 +33,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
- <link rel="canonical" href="https://ignite.apache.org/features/datagrid.html"/>
+ <link rel="canonical" href="https://ignite.apache.org/use-cases/datagrid.html"/>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
diff --git a/use-cases/dih.html b/use-cases/dih.html
new file mode 100644
index 0000000..491a266
--- /dev/null
+++ b/use-cases/dih.html
@@ -0,0 +1,152 @@
+<!--
+ ▄▄▄ ██▓███ ▄▄▄ ▄████▄ ██░ ██ ▓█████ ██▓ ▄████ ███▄ █ ██▓▄▄▄█████▓▓█████
+▒████▄ ▓██░ ██▒▒████▄ ▒██▀ ▀█ ▓██░ ██▒▓█ ▀ ▓██▒ ██▒ ▀█▒ ██ ▀█ █ ▓██▒▓ ██▒ ▓▒▓█ ▀
+▒██ ▀█▄ ▓██░ ██▓▒▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒███ ▒██▒▒██░▄▄▄░▓██ ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
+░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█ ▄ ░██░░▓█ ██▓▓██▒ ▐▌██▒░██░░ ▓██▓ ░ ▒▓█ ▄
+ ▓█ ▓██▒▒██▒ ░ ░ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒ ░██░░▒▓███▀▒▒██░ ▓██░░██░ ▒██▒ ░ ░▒████▒
+ ▒▒ ▓▒█░▒▓▒░ ░ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░ ░▓ ░▒ ▒ ░ ▒░ ▒ ▒ ░▓ ▒ ░░ ░░ ▒░ ░
+ ▒ ▒▒ ░░▒ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ░ ░ ░ ░ ░
+ ░ ▒ ░░ ░ ▒ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
+ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
+-->
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <link rel="canonical" href="https://ignite.apache.org/use-cases/dih.html"/>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <meta name="description"
+ content="Apache Ignite functions as a low-latency and shared store of the digital integration hub architecture
+ that caches and persists data sets scattered across many disjointed back-end databases and systems."/>
+
+ <title>Digital Integration Hub - Apache Ignite</title>
+
+ <!--#include virtual="/includes/styles.html" -->
+
+ <!--#include virtual="/includes/sh.html" -->
+</head>
+<body>
+<div id="wrapper">
+ <!--#include virtual="/includes/header.html" -->
+
+ <main id="main" role="main" class="container">
+ <section id="shared-memory-layer" class="page-section">
+ <h1 class="first">Building Digital Integration Hub With Apache Ignite</h1>
+ <div class="col-sm-12 col-md-12 col-xs-12" style="padding:0 0 10px 0;">
+ <div class="col-sm-6 col-md-6 col-xs-12" style="padding-left:0; padding-right:0">
+ <p>
+ A digital integration hub (DIH) is an advanced platform architecture that aggregates
+ multiple back-end systems and databases into a low-latency and shared data store. Apache
+ Ignite can function as this high-performance shared store by caching and persisting data sets
+ dispersed across many disjointed external databases and systems.
+ </p>
+
+ <p>
+ Applications typically access Ignite via an API services layer and get substantial
+ performance growth by requesting data from this only distributed store that, in its turn,
+ keeps all the records in memory and offloads the back-end systems.
+ </p>
+ </div>
+
+ <div class="col-sm-6 col-md-6 col-xs-12" style="padding-right:0">
+ <img class="img-responsive" src="/images/digital-hub.png" width="440px"
+ style="float:right;"/>
+ </div>
+ </div>
+
+ <p>
+ The primary purpose of Ignite as of a DIH component is to enable implementations of large-scale and
+ high-throughput architectures that prevent the back-end systems from being overwhelmed with excessive
+ workloads and to avoid complex integrations between the back-end databases and front-end API services.
+ </p>
+
+ <div class="page-heading">Synchronization of Apache Ignite and Back-End Systems</div>
+ <p>
+ Ignite, as the high-performance data store, needs to be synchronized with the back-end databases via
+ streaming, event-based, change data capture (CDC), or other techniques.
+ </p>
+
+ <p>
+ Ignite provides a <code>CacheStore</code> interface for one-way synchronization between an Ignite
+ cluster and an external store supporting relational databases and some NoSQL stores out-of-the-box.
+ The interface allows Ignite to write-through or write-behind all the changes to the backend-systems
+ automatically. It also includes transactions - Ignite coordinates and commits a transaction across its
+ in-memory cluster as well as an external transactional database.
+ </p>
+
+ <p>
+ For bi-directional synchronization, you can consider various streaming, CDC, and event-based
+ technologies. For instance, Kafka, Spark, Debezium are widely used to keep Ignite in sync with other
+ databases.
+ </p>
+
+ <div class="page-heading">Real-Time Analytics</div>
+
+ <p>
+ Although real-time analytics is not a defining characteristic of digital integration hub architectures,
+ in some situations, you can end up consolidating operational and analytical data silos in Apache Ignite.
+ If this happens, you can tap into Ignite SQL, compute and machine learning capabilities for real-time
+ analytics needs.
+ </p>
+
+ <div class="page-heading">Learn More</div>
+ <p>
+ <a href="https://apacheignite-mix.readme.io/docs/overview" target="docs">
+ <b>Ignite and Streaming Technologies <i class="fa fa-angle-double-right"></i></b>
+ </a>
+ </p>
+ <p>
+ <a href="https://apacheignite-fs.readme.io/docs/overview" target="docs">
+ <b>Ignite and Spark Integration <i class="fa fa-angle-double-right"></i></b>
+ </a>
+ </p>
+ <p>
+ <a href="/features/sql.html">
+ <b>Distributed SQL <i class="fa fa-angle-double-right"></i></b>
+ </a>
+ </p>
+ <p>
+ <a href="http://localhost/features/collocatedprocessing.html">
+ <b>Co-located Processing <i class="fa fa-angle-double-right"></i></b>
+ </a>
+ </p>
+ <p>
+ <a href="/features/machinelearning.html">
+ <b>Machine and Deep Learning <i class="fa fa-angle-double-right"></i></b>
+ </a>
+ </p>
+ <p>
+ <a href="/arch/memorycentric.html">
+ <b>Memory-Centric Storage <i class="fa fa-angle-double-right"></i></b>
+ </a>
+ </p>
+ </section>
+ </main>
+
+ <!--#include virtual="/includes/footer.html" -->
+</div>
+<!--#include virtual="/includes/scripts.html" -->
+</body>
+</html>
diff --git a/use-cases/platforms/dotnet.html b/use-cases/platforms/dotnet.html
deleted file mode 100644
index 83c9a50..0000000
--- a/use-cases/platforms/dotnet.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!--
-▄▄▄ ██▓███ ▄▄▄ ▄████▄ ██░ ██ ▓█████ ██▓ ▄████ ███▄ █ ██▓▄▄▄█████▓▓█████
-▒████▄ ▓██░ ██▒▒████▄ ▒██▀ ▀█ ▓██░ ██▒▓█ ▀ ▓██▒ ██▒ ▀█▒ ██ ▀█ █ ▓██▒▓ ██▒ ▓▒▓█ ▀
-▒██ ▀█▄ ▓██░ ██▓▒▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒███ ▒██▒▒██░▄▄▄░▓██ ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
-░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█ ▄ ░██░░▓█ ██▓▓██▒ ▐▌██▒░██░░ ▓██▓ ░ ▒▓█ ▄
-▓█ ▓██▒▒██▒ ░ ░ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒ ░██░░▒▓███▀▒▒██░ ▓██░░██░ ▒██▒ ░ ░▒████▒
-▒▒ ▓▒█░▒▓▒░ ░ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░ ░▓ ░▒ ▒ ░ ▒░ ▒ ▒ ░▓ ▒ ░░ ░░ ▒░ ░
- ▒ ▒▒ ░░▒ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ░ ░ ░ ░ ░
- ░ ▒ ░░ ░ ▒ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
- ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
--->
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<link rel="canonical" href="https://ignite.apache.org/use-cases/platforms/dotnet.html" />
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
- <meta http-equiv="Pragma" content="no-cache" />
- <meta http-equiv="Expires" content="0" />
- <title>.NET Data Grid - Apache Ignite</title>
- <!--#include virtual="/includes/styles.html" -->
-
- <!--#include virtual="/includes/sh.html" -->
-</head>
-<body>
-<div id="wrapper">
- <!--#include virtual="/includes/header.html" -->
-
- <main id="main" role="main" class="container">
- <section id="mapreduce" class="page-section">
- <h1 class="first">Apache Ignite as .NET Data Grid</h1>
- <div class="col-sm-12 col-md-12 col-xs-12" style="padding:0 0 20px 0;">
- <div class="col-sm-6 col-md-6 col-xs-12" style="padding-left:0;">
- <p>
- The Ignite In-Memory Data Fabric provides a unified API that spans
- JVM-based languages like Java, Scala and Groovy as well as first class support for
- Microsoft CLR (.NET/C#) and C++. It connects them with multiple data stores containing structured,
- semi-structured and unstructured data (SQL, NoSQL, Hadoop). It offers a secure, highly available and
- manageable data environment that allows to process full ACID transactions and generate
- valuable insights from real-time, interactive and batch queries.
- </p>
-
- <p>
- Ignites's In-Memory Data Fabric for .NET is designed to deliver uncompromised
- performance for a wide set of in-memory computing use cases on top of .NET platform -
- from high performance computing, to the industry most advanced data grid, CEP, and data streaming - all through native, optimized .NET APIs.
- </p>
- </div>
-
- <div class="col-sm-6 col-md-6 col-xs-12" style="padding-right:0;">
- <!--<img class="first img-responsive" src="/images/hadoop_sequence.png" style="float:right;"/>-->
- </div>
- </div>
-
- <p>
- One of the key technology behind .NET In-Memory Data Fabric is Portable Object that allows Ignite code access and exchange objects between multiple platforms:
- <ul class="page-list">
- <li>Seamlessly interoperate between Java and .NET.</li>
- <li>Make any object portable with zero code change to your existing code.</li>
- <li>Nest portable objects within each other.</li>
- <li>Automatically handle circular or null references.</li>
- <li>Automatically convert collections and maps between Java, .NET, and C++.</li>
- <li>Optionally avoid deserialization of objects on the server side.</li>
- <li>Avoid need to have concrete class definitions on the server side.</li>
- <li>Dynamically change structure of the classes without having to restart the cluster.</li>
- <li>Index into portable objects for querying purposes.</li>
- </ul>
- </p>
-
- <!--<p>-->
- <!--<a href="https://apacheignite.readme.io/docs/map-reduce">-->
- <!--<b>Configure In-Memory MapReduce <i class="fa fa-angle-double-right"></i></b>-->
- <!--</a>-->
- <!--</p>-->
- </section>
-
- </main>
-
- <!--#include virtual="/includes/footer.html" -->
-</div>
-<!--#include virtual="/includes/scripts.html" -->
-</body>
-</html>
diff --git a/provenusecases.html b/use-cases/provenusecases.html
similarity index 99%
rename from provenusecases.html
rename to use-cases/provenusecases.html
index a3f8c51..1aaf991 100644
--- a/provenusecases.html
+++ b/use-cases/provenusecases.html
@@ -33,7 +33,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
- <link rel="canonical" href="https://ignite.apache.org/provenusecases.html" />
+ <link rel="canonical" href="https://ignite.apache.org/use-cases/provenusecases.html" />
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />