diff options
Diffstat (limited to 'www/serverless.html')
-rw-r--r-- | www/serverless.html | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/www/serverless.html b/www/serverless.html new file mode 100644 index 0000000..1fedf36 --- /dev/null +++ b/www/serverless.html @@ -0,0 +1,224 @@ +<!DOCTYPE html> +<html><head> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta http-equiv="content-type" content="text/html; charset=UTF-8"> +<link href="sqlite.css" rel="stylesheet"> +<title>SQLite Is Serverless</title> +<!-- path= --> +</head> +<body> +<div class=nosearch> +<a href="index.html"> +<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0"> +</a> +<div><!-- IE hack to prevent disappearing logo --></div> +<div class="tagline desktoponly"> +Small. Fast. Reliable.<br>Choose any three. +</div> +<div class="menu mainmenu"> +<ul> +<li><a href="index.html">Home</a> +<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a> +<li class='wideonly'><a href='about.html'>About</a> +<li class='desktoponly'><a href="docs.html">Documentation</a> +<li class='desktoponly'><a href="download.html">Download</a> +<li class='wideonly'><a href='copyright.html'>License</a> +<li class='desktoponly'><a href="support.html">Support</a> +<li class='desktoponly'><a href="prosupport.html">Purchase</a> +<li class='search' id='search_menubutton'> +<a href="javascript:void(0)" onclick='toggle_search()'>Search</a> +</ul> +</div> +<div class="menu submenu" id="submenu"> +<ul> +<li><a href='about.html'>About</a> +<li><a href='docs.html'>Documentation</a> +<li><a href='download.html'>Download</a> +<li><a href='support.html'>Support</a> +<li><a href='prosupport.html'>Purchase</a> +</ul> +</div> +<div class="searchmenu" id="searchmenu"> +<form method="GET" action="search"> +<select name="s" id="searchtype"> +<option value="d">Search Documentation</option> +<option value="c">Search Changelog</option> +</select> +<input type="text" name="q" id="searchbox" value=""> +<input type="submit" value="Go"> +</form> +</div> +</div> +<script> +function toggle_div(nm) { +var w = document.getElementById(nm); +if( w.style.display=="block" ){ +w.style.display = "none"; +}else{ +w.style.display = "block"; +} +} +function toggle_search() { +var w = document.getElementById("searchmenu"); +if( w.style.display=="block" ){ +w.style.display = "none"; +} else { +w.style.display = "block"; +setTimeout(function(){ +document.getElementById("searchbox").focus() +}, 30); +} +} +function div_off(nm){document.getElementById(nm).style.display="none";} +window.onbeforeunload = function(e){div_off("submenu");} +/* Disable the Search feature if we are not operating from CGI, since */ +/* Search is accomplished using CGI and will not work without it. */ +if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){ +document.getElementById("search_menubutton").style.display = "none"; +} +/* Used by the Hide/Show button beside syntax diagrams, to toggle the */ +function hideorshow(btn,obj){ +var x = document.getElementById(obj); +var b = document.getElementById(btn); +if( x.style.display!='none' ){ +x.style.display = 'none'; +b.innerHTML='show'; +}else{ +x.style.display = ''; +b.innerHTML='hide'; +} +return false; +} +var antiRobot = 0; +function antiRobotGo(){ +if( antiRobot!=3 ) return; +antiRobot = 7; +var j = document.getElementById("mtimelink"); +if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href"); +} +function antiRobotDefense(){ +document.body.onmousedown=function(){ +antiRobot |= 2; +antiRobotGo(); +document.body.onmousedown=null; +} +document.body.onmousemove=function(){ +antiRobot |= 2; +antiRobotGo(); +document.body.onmousemove=null; +} +setTimeout(function(){ +antiRobot |= 1; +antiRobotGo(); +}, 100) +antiRobotGo(); +} +antiRobotDefense(); +</script> +<div class=fancy> +<div class=nosearch> +<div class="fancy_title"> +SQLite Is Serverless +</div> +</div> + + + + + +<h1 id="sqlite_is_serverless"><span>1. </span>SQLite Is Serverless</h1> + +<p> +Most SQL database engines are implemented as a separate server process. +Programs that want to access the database communicate with the server +using some kind of interprocess communication (typically TCP/IP) to send +requests to the server and to receive back results. +SQLite does not work this way. +With SQLite, the process that wants to access the database reads and +writes directly from the database files on disk. +There is no intermediary server process. +</p> + +<p> +There are advantages and disadvantages to being serverless. +The main advantage is that there is no separate server process +to install, setup, configure, initialize, manage, and troubleshoot. +This is one reason why SQLite is a +"<a href="zeroconf.html">zero-configuration</a>" database engine. +Programs that use SQLite require no administrative support for +setting up the database engine before they are run. +Any program that is able to access the disk is able to use an SQLite database. +</p> + +<p> +On the other hand, a database engine that uses a server can +provide better protection from bugs in the client +application - stray pointers in a client cannot corrupt memory +on the server. +And because a server is a single persistent process, +it is able to control database access with more precision, +allowing for finer-grained locking and better concurrency. +</p> + +<p> +Most SQL database engines are client/server based. +Of those that are serverless, SQLite is the only one +known to this author that allows multiple applications +to access the same database at the same time. +</p> + +<h1 id="classic_serverless_vs_neo_serverless"><span>2. </span>Classic Serverless Vs. Neo-Serverless</h1> + +<p> +<i>(This section was added on 2018-04-02)</i> + +</p><p> +Recently, folks have begun to use the +word "serverless" to mean something subtly different from its intended +meaning in this document. Here are two possible definitions of "serverless": + +</p><ol> +<li><p> +<b>Classic Serverless:</b> +The database engine runs within the same process, thread, and address space +as the application. There is no message passing or network activity. + +</p></li><li><p> +<b>Neo-Serverless:</b> +The database engine runs in a separate namespace from the application, +probably on a separate machine, but the database is provided as a +turn-key service by the hosting provider, requires no management or +administration by the application owners, and is so easy to use +that the developers can think of the database as being serverless +even if it really does use a server under the covers. +</p></li></ol> + +<p> +SQLite is an example of a classic serverless database engine. +With SQLite, there are no other processes, threads, machines, or +other mechanisms (apart from host computer OS and filesystem) +to help provide database services or implementation. There really +is no server. + +</p><p> +<a href="https://docs.microsoft.com/en-us/azure/cosmos-db/serverless-computing-database">Microsoft Azure Cosmo DB</a> +and +<a href="https://aws.amazon.com/s3/">Amazon S3</a> +are examples of a neo-serverless databases. +These database are implemented by server processes running separately +in the cloud. +But the servers are maintained and administered by the ISP, not by +the application developer. +Application developers just use the service. Developers do not have to +provision, configure, or manage database server instances, as all of that +work is handled automatically by the service provider. Database servers +do in fact exist, they are just hidden from the developers. + +</p><p> +It is important to understand these two different definitions for +"serverless". +When a database claims to be "serverless", +be sure to discern whether they mean "classic serverless" +or "neo-serverless". +</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/serverless.in?m=b6f6dbff74f67a539">2018-04-02 15:25:54</a> UTC </small></i></p> + |