Elasticsearch:ES 倒排索引为什么查询速度会这么快

Elasticsearch:ES 倒排索引为什么查询速度会这么快,第1张

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,它建立在全文搜索引擎 Apache Lucene™ 的基础上。Elasticsearch 之所以可以实现近乎实时的检索,依靠的技术手段是非常多的,本文将从 反向索引、Term Index 两块知识点入手,分析 Elasticsearch 之所以那么快的原因。

在上表所展示的 “文档-关键词” 矩阵索引中,如果用户使用搜索引擎查找目标关键字(比如 火星 ),搜索引擎就会从索引库中所有的关键字包含 火星 的文档,也就是 web_x_1、web_x_2 ,并根据网页文件自身的价值评分高低(比如关键词出现的次数)按顺序展示给用户,用户得到的就是 按顺序 展示的 web_x_2 web_x_1 两个网页。这就是正向索引实现的大致流程。

在这个矩阵中, 火星 关键词对应的所有网页都被提前找到,甚至网页文档的权重都被提前计算好并排序,当用户输入 火星 关键词时,就会立刻到 web_x_2, web_x_1 的反馈结果。
这里有些人会有疑问,关键词数量会不会太多,以至于超过网页问的数量,这样效率不会反而变低了么,其实不然,人类的语言词汇数量是相对有限、且固定的,但网页数量却没有上限。比如汉语中,汉字30000个、词汇大概40万,但汉语网站数量却远远不止这么些。
需要注意的是,由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。

针对这个表,Elasticsearch 会创建如下的索引:
索引一: Name

索引二: Color

索引三: Rate

在这个索引中,Name、Color、Rate 这些字段被称为 filed , iphone 666 plus、blue、middle 这些被称作 Term ,而 Term 对应的所有商品的 id 比如 [1, 3] 就是 Posting List
当用户要查找 Color=blue 的商品时,通过索引三的 Term 和 Posting List 很快就可以找到,目标是 id 为 2 的商品,进而通过索引一找到商品 Name 为 华为 mate 98k。

上面简单解释了 Term 和 Posting List,但实际生产中 Elasticsearch 需要面对的是数以亿计的数据记录,数据的 Term 的数量是惊人的,这样往往需要花费大量时间才能命中,而且多数时候查找是多条件查找,这就需要多次进行重复查找,效率仍然不高。
这时就需要对 Term 进行优化排序,即使用 二分查找 查找 Term,这种查找方法类似于通过字典查找,被称为 Term Dictionary 。
同样是上面的例子,Name、Color、Rate 三个索引下所有的 Term,按照 首字母在英语字母表中位置 排序后如下:

当用户想要查找 rate 为 high 的商品时,通过二分法很快就可以查到,查找过程的时间复杂度为 log N,这样就大大提高了查找的速度。关于二分查找,细节这里就不做赘述了,如果不清楚的朋友们可以自行百度,或点击 二分查找 获取更多信息。

到这里很多人会有疑问,那这和传统的 B-tree 有什么区别呢,这就需要引入另一个概念 Term Index。
Term Index 其实也可以理解为一个树形结构,从 Term 的第一个字母开始进行第一层排序,如果有多个 Term 首字母相同,则从该字母为起始点进行第二层排序,如果以该字母为首的只有一个 Term,则不再进行第二次排序。
同样是上面的例子,其 Term Index 如下图所示:

在上图中,字母 b 为首的 Term 有两个,分别为 blue 和 black,这时就需要进行第二层排序,即对第二位字母进行排序,这时我们发现两个 Term 的第二位字母都为 l,于是进行第三层排序,第三层排序的结果是 bla、blu ,分别对应 black、blue 两个 Term,并对应 [1, 3]、2 两个 Posting List。对应关系如下图所示:

在 Term Index 中需要保存的是 Term 的前面部分字段,以及与 Term Dictionary 之间的映射关系,这使得存储的信息量减少。再结合 FST(Finite State Transducer)压缩技术,Term Iindex 可以被压缩到足够小,以至于可以被缓存进服务器内存中。这样,在用户查找的时候,先在内存里从 Term Index 找到 Term Dictionary 中的位置映射关系,然后再去磁盘上找对应的 Term,进而查找对应的 Posting List,这就大大减少了磁盘的读取次数,也就提高了效率和速度。

关于 FST 压缩技术,请参考这篇文章: >

导致这个错误的可能的原因是:

1) 远程计算机上的远程连接可能没有启用。

2) 已超出远程计算机上的连接最大数。

3) 建立连接时出现了一个网络错误

解决办法:

进入注册表编辑器窗口,展开“HKEY_L0CAL_MA CHINE\ SYSTEM\CurrentControlSet\Services\TermService\ Parame ters”,找到名为“Cer tificate”的子键,将它删除,重新启动XP 系统或Windows 2000 Server 服务器,系统就会重新生成“Certificate”子键,这样客户端就能正常连接到终端服务器了。

在终端服务器出现无法连接的问题后,我们首先要判断这是不是网络故障引起的,检测远
程客户端和XP 系统(Windows 2000 Server 服务器)是否能够正常连接到网络; 然后就要检
查终端服务器的加密级别是否设置过高。排除上述原因后,就有可能是“Certificate”键损坏了。

此外,Service\Parameters”下的“HKEY_LOCAL_MACHINE\ SYSTEM\Cur rentControlSet\Serv ices\Term
“X509 Certificate”和“X509 Certificate ID”损坏了也有可能导致终端服务出现问题,它们的修复方法与“Certificate”子键损坏后的修复方法相同。

根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。
具体步骤如下:/导致这种情况的原因主要是……

1选择
11一个文件的名字为rrZ,可以用来解压缩的命令时()
tar
gzip
compress
uncompress
12可以结束进程命令()
kill
ctrl+c
shutdown
halt
13 Linux下对文件进行归档的命令为:(多选)
dd
tar
zip
unzip
14 Linux查当前目录下30天以前的文件并移动到/dev/null下的命令:(多选)
find-mtime 30-type f xargs mv{}/dev/null;
find-mtime+30-type xargs mv{}/dev/null;
find-mtime+30-type f-exec mv{}/dev/null;
find-mtime+30-type f-exec rm–rf{};
15 dstat与下面哪个命令类似
vmstat
sar
iotop
abc
16 rpm安装软件的参数
rpm-ivh
rpm-Ivh
rpm-Uvh
rpm-Iuvh
17 yum升级软件包选项
rpm-uvh
rpm-Uvh
18查看网络流量命令是
iftop
nsload
ifstatd
以上命令全可以
19停止进程的命令,除了kill还有谁
pkill
killa
allkill
以上命令都不正确
110服务器之间传文件的命令有
wget
scp
ftp
以上命令都可以
111对文件进行归档的命令为
dd
cpio
gzip
tar
112在rpm命令中,安装新的rpm包软件使用的参数是()
-i
-v
-h
-e
113du命令中,使用友好的方式显示信息的参数是()
-h
-f
-a
-t
114将/home/stud1/wang目录做归档压缩,压缩后生成wangtargz文件,并将此文件保存到/home目录下,实现如此任务的tar命令格式___
tar zxvf/home/stud1/wangtargz/home/wang
tar xcvf/home/stud1/wang/home/wang
tar zcv/home/stud1/wang/home/wang
tar zcvf/home/stud1/wang/home/wangtargz
115终止一个前台进程可能用到的命令和 *** 作()A:kill
B:CTRL+C
C:shutdown
D:halt
116关闭Linux系统(不重新启动)可使用命令()
A:Ctrl+Alt+Del
B:halt
C:shutdown-r now
D:reboot
117下列提法中,不属于ifconfig命令作用范围的是__
A:配置本地环回地址
B:配置网卡的IP地址
C:激活网络适配器
D:加载网卡到内核中
118有关归档和压缩命令,下面描述正确的是()
A:用uncompress命令解压缩由compress命令生成地后缀为zip的压缩文件
B:upzip命令和gzip命令可以解压相同类型文件
C:tar归档其压缩的文件可以有gzip命令解压缩
D:tar命令归档后的文件也是一种压缩文件
119终止一共前台进程可能用到的命令和 *** 作
kill
ctrl+c
shut down
halt
122为了将当前目录下的归档文档myftp,tar解压缩到/tmp目录下,用户可以使用命令
tar xvzf myftptgz-C/tmp
tar xvzf myftptgz-R/tmp
tar vzf myftptgz-X/tmp
tar xvzf myftptgz/tmp
123下面有关linux查看系统负载的命令,说法错误的是
uptime命令主要用于获取主机运行时间和查询linux系统负载等信息
vmstat命令可以查看cpu负载
sar命令可以查看网络接口信息
free命令可以查看磁盘负载情况
124以下哪些方式/命令不可以查看某ip是否可达
telnet
ping
tracert
top
125 tar命令用于解压的参数是-v-x-c-f
126下面哪个命令不是用来查看网络故障
telnet
ping
init
netstat
128为了知道谁在正注册到你的机器上,可以用命令:___
Who users finger ping
129查看本网段其他计算机的MAC地址,可先ping对方主机,然后;
arp-g
arp-n
arp-a
arp-d
13014日下午2点date+%y%m%d%H%M输出的时间是什么
201711141212
1711141212
2017111412
201711021212
131以下哪个命令可以得出1487进程的线程运行情况()
top-Hp 1487
top-Pp 1487
ps-mp 1487
sat-p 1487
132从/home/oracle下搜索一个日志文件alertlog,以下哪种方式可达到目的()
find/home/oracle-name alertlog
locate alertlog
find/-mtime 7 alertlog
find/home/oracle-exec alertlog
134以下哪些命令可以用来测试网络中特定主机的80端口是否可以访问()
Ping telnet netstat lsof
2填空
21测试网络中主机的连通性用什么命令
22如何查看numa是否关闭__
23将/home/stud1/wang目录做归档压缩,压缩后生成wangtargz文件,并将此文件保存到/home目录下,实现如此任务的tar命令格式_
24某个进程使用端口7001,如何快速找到该进程的PID
25结束后台进程的命令是_
26将/home/studl/wang目录做归档压缩,压缩后生成wangtargz文件,并将此存到/home目录下,实现此任务的tar命令格式__
27 ping100个包的命令——
28 linux下,解压缩bz2格式文件的命令是_
29 linux下,查看网络连接状态的命令是___
210Linux查看文件系统的命令为__,显示目录或文件占用磁盘的命令为___
211通常我们测试网络连通性使用的ping命令,它是通过____协议进行工作的
212简述下列命令的各自作用
nslookup
dig
top
traceroute
213将/home/stud1/wang目录做归档压缩,压缩后生成wangtargz文件,并将此问价保存到/home目录下,实现此任务的tar命令格_
214Linux系统查看进程数的命令___
215Linux系统查看系统内存的命令:____,__
216Linux系统查看cpu使用率的命令:____,__
217Linux系统查看硬盘空间使用率的命令:___
218Linux系统将某一文件下的所有log文件进行打包压缩,命令为___
219Linux常用的性能监控命令是:_、_、_、_、_、_等
220假设output程序可能输出标准输出和标准错误,请写出一条命令把这两者都忽略__
221 rpm软件包安装命令_
3简答
31查看硬盘结构显示的命令查看文档命令编辑文档命令
32配置网络环境的命令,手工修改IP,主机名,DNS和网关
33有压缩包atargz,如何解压该包如何不解压该包,如何查看该包的内容
34某进程abcd在系统中起了很多,数量难以统计,造成系统负荷较高,如何一条命令确保将此进程全部杀掉
35某日志路径是/data/logs/atxt,如何跟踪该日志,以查看当时的运行状态
36 dmesg命令显示的是哪方面信息
37寻找名称为mytestlog的文件
38写出du-sh与df-h的区别
39查看当前linux服务器是否监听80端口,如果监听,请找出其进程ID,并结束该进程。
310使用curl或者wget获取>一、以非特权用户运行MySQL服务器
在讨论如何启动MySQL服务器之前,让我们考虑一下应该以什么用户身份运行MySQL服务器。服务器可以手动或自动启动。如果你手动启动它,服务器以你登录Unix(Linux)的用户身份启动,即如果你用paul登录Unix并启动服务器,它用paul运行;如果你用su命令切换到root,然后运启动服务器,则它以root运行。然而,大多数情况下你可能不想手动启动服务器,最有可能是你安排MySQL服务器在系统引导时自动启动,作为标准引导过程的一部分,在Unix下,该引导过程由系统的Unix用户root执行,并且任何在该过程中运行的进程均以root权限运行。
你应该牢记MySQL服务器启动过程的两个目标:
你想让服务器以某个非root用户运行。一般地,你想限制任何运行进程的能力,除非确实需要root权限,而MySQL不需要。
你想让服务器始终以同一个用户运行,此时用一个用户而其他时候以另一个不同的用户运行服务器是很不方便的,这造成了为文件和目录以具有不同属主的数据目录下被创建,并可能导致服务器不能访问数据库或表,这看你以哪个用户运行。统一用同一个用户运行服务器是你避免这个问题。
要一个普通的非特权用户运行服务器,按照下列步骤:
选择一个用于运行服务器的用户,mysqld可以用任何用户运行。但在概念上较清晰的是为MySQL *** 作创建一个单独的用户。你也可以特别为MySQL选择一个用户组。本文使用mysqladm和mysqlgrp分别作为用户名和用户组名。
如果你已在自己的账号下安装好了MySQL且没有系统上的特殊管理权限,你将可能在你自己的用户ID下运行服务器。在这种情况下,用你自己的登录名和用户组代替mysqladm和mysqlgrp。
如果你在RedHat Linux上用rpm文件安装MySQL,该安装将自动创建一个名为mysql的账号,用该账号代替mysqladm。
如果必要,用系统通常的创建用户的过程创建服务器账号,你需要用root做它。
如果服务器在运行,停止它。
修改数据目录和任何子目录和文件的属主,这样使得mysqladm用户拥有它们。例如,如果数据目录是/usr/local/var,你可以如下设置mysqladm的属主(你需要以root运行这些命令):
#cd /usr/local/var
#chown -R mysqladmmysqlgrp
修改数据目录和任何子目录和文件的权限,使得它们只能由mysqladm用户访问。如果数据目录是/usr/local/var,你可以设置由mysqladm拥有的任何东西:
# cd /usr/local/var
# chmod -R go-rwx
当你设置数据目录及其内容的属主和模式时,注意符号连接。你需要顺着它们并改变它们指向的文件或目录的属主和模式。如果连接文件的目录位于不属于你的地方,会有些麻烦,你可能需要root身份。
在你完成了上述过程后,你应该确保总是在以mysqladm或root登录时启动服务器,在后者,确定指定--user=mysqladm选项,使服务器能将其用户ID切换到mysqladm(同时也适用于系统启动过程)。
--user选项在MySQL 322中引入,如果你有老版本,你可以使用su命令告诉系统在以root运行时在特定的用户下运行服务器。
二、启动服务器的方法
在我们确定了用于运行服务器的账号后,你可以选择如何安排启动服务器。你可以从命令行手动或在系统引导过程中自动地运行它。对于启动服务器由三种主要方法:
直接调用mysqld。
这可能是最不常用的方法,建议不要多使用,因此本文不详细介绍。
调用safe_mysqld脚本。
safe_mysqld试图确定服务器程序和数据目录的位置。然后用反映这些值的选项调用服务器。safe_mysqld将标准出错设备从服务器重定位到数据目录下的一个出错文件,使得有它的一条记录。在启动服务器后,safe_mysqld也监视它并且如果它死掉则重启它。safe_mysqld常用于BSD风格的Unix系统。
如果你以root或在系统引导期间启动sqfe_mysqld,出错日志由root拥有,这可能在你以后试图用一个非特权用户调用safe_mysqld时将导致“permission denied”(权限拒绝)错误,删除出错日志再试一下。
调用mysqlserver脚本。
这个脚本通过有意用于System V的启动和停止系统上的safe_mysqldmysqlserver来启动服务器,该系统包含几个包含在机器进入或退出一个给定运行级别时被点用的脚本目录。它可以用一个start或stop参数点用以表明你是想启动还是想停止服务器。
safe_mysqld脚本安装在MySQL安装目录的bin目录下,或可在MySQL源代码分发的scripts目录下找到。mysqlserver脚本安装在MySQL安装目录下的share/mysqld目录下或可以在MySQL源代码分发的support_files目录下找到。如果你想使用它们,你需要将它们拷贝到适当的目录下。
对BSD风格的系统(FreeBSD,OpenBSD等),通常在/etc目录下有几个文件在引导时初始化服务,这些文件通常有以“rc”开头的名字,且它有可能由一个名为“rclocal”的文件(或类似的东西),特意用于启动本地安装的服务。在这样的系统上,你可能将类似于下列的行加入rclocal文件中以启动服务器(如果safe_mysqld的目录在你的系统上不同,修改它即可):
if [ -x /usr/local/bin/safe_mysqld ]; then
/usr/local/bin/safe_mysqld &
fi
对于对于System V风格的系统,你可以通过将mysqlserver放在/etc下适当的启动目录下来安装它。如果你运行Linux并从一个RPM文件安装MySQL,这些已经为你做好了,否则将脚本安装在主启动目录下,并将指向它的连接放在适当的运行级别目录下。你也可以使脚本只能由root启动。
启动文件的目录布局各系统不同,所以你需要检查一下看看你的系统如何组织它们。例如在Linux PPC上,目录是/etc/rcd和/etc/rcd/rc3d,这样你可以这样安装脚本:
#cp mysqlserver /etc/rcd/initd
#cd /etc/initd
#chmod 500 mysqlserver
#cd /etc/rcd/rc3d
#ln -s /initd/mysqlserver S99mysql
在solaris上,主脚本目录是/etc/initd,并且运行级别目录是/etc/rd2d,所以命令看上去像这样:
#cp mysqlserver /etc/rcd/initd
#cd /etc/initd
#chmod 500 mysqlserver
#cd /etc/rc2d
#ln -s /initd/mysqlserver S99mysql
在系统启动时,S99mysql脚本将自动用一个start参数调用。如果你有chkconfig命令(Linux上有),你可以由它帮助安装mysqlserver脚本而不是象上面那样手工运行上述命令。
21 指定启动选项
如果你想在服务器启动时指定额外的启动选项,你可有两种方法。你可以修改你使用的启动脚本(safe_mysqld或mysqlserver)并直接在调用服务器的行上指定选项,或在一个选项文件中指定选项。建议你如果可能在一个全局选项文件中指定选项,它通常位于/etc/mycnf(Unix)或c:\mycnf(Windows)。
某些种类的信息无法以服务器选项指定。对于这些你可能需要修改safe_mysqld。例如,如果你的服务器不能正确选择本地时区而以GMT返回时间值,你可以设置TZ环境变量给它一个指示。如果你用safe_mysqld或mysqlserver启动服务器,你可以将一个时区设置加到safe_mysqld。找到启动服务器的行并在该行前加入下列命令:
TZ=US/Central
export TZ
上面命令的语法是Solaris的,对于其他系统语法可能不同,请查阅相关手册。如果你确实修改了你的启动脚本,要记住下次你安装MySQL时(如升级到新版本),你的修改将失去,除非你首先在别处复制了启动脚本。在安装了新版本后,比较新旧版本的脚本,看看你需要重建什么改变。
22 在启动时检查你的表
除了安排你的服务器在系统引导时启动,你可能要安装myisamchk和isamchk脚本,以在服务器启动前检查你的表。你可能在一个崩溃后重启,有可能表已经损害,在启动前检查它是一个发现问题的好方法。
三、停止服务器
要手工启动服务器,使用mysqladmin:
%mysqladmin shutdown
要自动停止服务器,你不需做特别的事情。BSD系统一般通过向进程发一个TERM信号停止服务,它们或者正确应答它或被粗鲁地杀死。mysqld在它收到这个信号时以终止作为应答。对于用mysqlserver启动服务器的System V风格的系统,停止进程将用一个stop参数调用该脚本,告诉服务器终止,当然假定你已安装了mysqlserver。
四、如果你不能连接服务器,如何重新获得对服务器的控制
在某些情况下,你可能由于不能连接它而手工重启服务器。当然,这有点矛盾。因为一般你通过连接服务器而手工关掉它,那么这种情况如何会出现。
首先,MySQL root口令可以已经设置为你不知道的值,这可能发生在你修改口令时,例如,如果你在输入新口令时偶然键入一个不可见的控制字符。你也可能忘记口令。
其次,连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysqlsock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。
如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。这里的骗局是你不能用套接字建立连接因为它不见了,你必须建立一个TCP/IP连接,例如,如果服务器主机是pitsnakenet,你可以这样连接:
%mysqladmin -p -u root -h pitsnakenet shutdown
如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不同的套接字文件,你可以使用全局选项文件指定一个不同的套接字,例如,如果数据目录是/usr/local/var,你可以通过将下列行加入/etc/mycnf中,将套接字文件移到那里:
[mysqld]
socket=/usr/local/var/mysqlsock
[client]
socket=/usr/local/var/mysqlsock
对服务器和客户均指定路径名,使得它们都使用同一个套接字文件。如果你只为服务器设置路径,客户程序将仍然期望在原位置执行套接字,在修改后重启服务器,使它在新位置创建套接字。
如果你由于忘记root口令或已经将它设置为不同于认为的值而不能连接,你需要重新获得对服务器的控制,是你能再次设置口令:
中断服务器
如果你以root登录服务器主机,你可以用kill命令终止服务器。你可以使用ps命令或通过寻找服务器的PID文件(通常在数据目录中)找出服务器进程的ID。
最好是首先尝试用一个向服务器发出一个TERM信号的正常kill看它是否将以正常终止应答。这种方式下,表和日志将正确地被清空。如果服务器阻塞并且不应答一个正常终止信号,你可以用kill -9强制终止它。这是最后的手段了,因为这可能有未清空的修改,而且你冒着让表处于一个不一致状态的风险。
如果你用kill -9终止服务器,要确保在启动服务器前用myisamchk和isamchk检查你的表。
用--skip-grant-table选项重启服务器。
这告诉服务器不使用授权表验证连接,这允许你以root连接而无须口令。在你已经连接后,改变root口令。
用mysqladmin flush-privileges告诉服务器再次使用授权表启动
如果你的mysqladmin版本不认识flash-privileges,试一试reload。
五、运行多个服务器
大多数再一台给定的机器上运行单个MySQL服务器,但在很多情况下,运行多个服务器是很有用的:
你可能想测试一个服务器的新版本,而保留你正在运行的生产服务器。在这种情况下,你会运行不同的服务器代码。
*** 作系统一般限制每个进程的打开文件句柄数量。如果你的系统很难提高这个限制,运行多个服务器是解决限制的一种方法。在这种情况下,你可能运行统一服务器的多个实例。
ISP经常为其客户提供自己的MySQL安装,有必要涉及单独的服务器。在这种情况下,你可能运行同一版本的多个实例或不同版本,如果不同的客户想要不同版本的MySQL。
很自然地,运行多个服务器比只运行一个服务器要复杂得多。如果你安装多个版本,你不能在同一个地方安装所有东西。当服务器运行时,某些参数必须或很可能对每个服务器是唯一的,它们包括服务器在哪安装、其数据目录的路径名、TCP/IP端口和UNIX域套接字路径名以及用于运行服务器的UNIX账号(如果你不再同一账号下运行所有服务器)。如果你决定运行多个服务器,一定要注意你使用的参数,是你不至于丢失对所发生的事情的踪迹。
51 配置和安装多个服务器
如果你要运行不同版本的服务器而不是同一版本的多个实例,你必须在不同地点安装它们。如果你安装二进制分发(不用RPM),它们将安装在包含不同版本号的目录名下。如果你从源代码安装,最简单的方法是在每个版本运行configure配置MySQL安装过程中使用--with-prefix选项使得不同分发分开,这将使得所有东西安装在一个单独的目录下,你可以将目录域分发版本号联系起来,如,你可以象这样配置一个MySQL分发,其中version是MySQL版本号:
%configure --with-prefix=/usr/local/mysql-version
--with-prefix选项也决定了服务器的一个唯一数据目录。你可能想加上其它服务器特定的选项,如TCP/IP端口号和套接字路径名(--with-tcp-port和--with-unix-socket)。
如果你想运行同一版本服务器的多个实例,任何必须基于一个服务器特定设置的选项将需要在运行时指定。
52 多服务器的启动过程
启动多个服务器比使用一个服务器要复杂。因为safe_mysqld和mysqlserver均在单个服务器设置上工作得最好。建议你仔细研究一下safe_mysqld并用它作为你的启动过程的基础,使用你修改的版本,你能针对你自己的需要更精确地裁剪它。
你必须处理的一个问题是如何在选项文件(mycnf)中指定选项。对于多服务器,你不能对于每个不同的服务器设置使用/etc/mycnf,你只能对所有服务器相同的设置使用该文件。如果服务器有一个不同的编译进去的数据目录位置,你可以在每个服务器数据目录中的mycnf中指定所有服务器要使用的设置,而使用DATADIR/mycnf指定服务器特定的设置,这里DATADIR以服务器不同而不同。
另一种指定服务器选项的方法是用--default-file=path_name作为命令行的第一个选项,告诉服务器从名为path_name中的文件中读取选项,这样你可以把一个服务器选项放在一个对该服务器唯一的文件中,然后告诉服务器在启动时读取该文件。注意,如果你指定这个选项,将不使用通常的选项文件如/etc/mycnf的任何一个。
可以看看>分类: 电脑/网络 >> 互联网
问题描述:

自己在许多网站上总是看到BBS论坛、BBS网页等,总觉得很神密似的,所以想了解一下到底什么是BBS,谁能给我一个系统而又明确的回答。就算帮小弟一个大忙吧!

解析:

BBS

,自由的百科全书

BBS是电子公告板系统(Bulletin Board System)之英文缩写,它通过在计算机上运行服务软件,允许用户使用终端程序通过电话调制解调器拨号或者Inter来进行连接,执行下载数据或程序、上传数据、阅读新闻、与其它用户交换消息等功能。许多BBS由站长(通常被称为SYSOP-SYStem OPerator)业余维护,而另一些则提供收费服务。
目前,有的时候BBS也泛指网络论坛或网络社群。

目录

[隐藏]

1 BBS技术及常见软件

2 BBS人文文化

o 21 中国大陆BBS“系统维护”现象

o 22 BBS用语

3 参看

4 外部链接

[编辑]

BBS技术及常见软件

因特网(Inter)之前,在20世纪80年代中叶就开始出现基于调制解调器(modem)和电话线通信的拨号BBS及其相互连接而成的BBS网络。

后来随着因特网的普及,拨号BBS和BBS网络已经日渐凋零,所剩无几。目前的BBS站点,多数是基于Inter的Tel协议。在服务器端,采用Maple BBS或者FireBird BBS系统。用户端通过Tel软件如NetTerm、CTerm、FTerm等来登陆服务器,阅读发表文章,发送邮件,通过仿真的ZModem协议来上传下载数据文件。有些站点还提供SSH登陆,确保连接的安全性,还有很多站点提供Web方式的界面,方便用户使用。

中国大陆BBS界在Firebird BBS基础上还发展了Smth BBS、Ytht BBS、Lily BBS等,提供非常丰富web方式访问,如发文、即时消息、信件、Blog,而一些管理 *** 作,如‘版面管理’、‘个人文集’则仍然限定为Tel访问。而客户端的Tel软件也发展了很多便于 *** 作的功能,如,鼠标响应、URL识别、预览,文章自动下载、自定义脚本等。

目前常见的tel客户端程序:

FTerm :支持SSH及代理连接。功能强大。

STerm :支持SSH及代理连接、脚本功能强大。

CTerm :(原Cterm2000版曾在大陆非常流行) 有大量快捷键,不支持SSH,最新版本是CTerm3000。

PCMan :有繁体及简体版本, 以档案体积小, 不占资源闻名。是继KKman后最通行的浏览器。另有PCmanX版本可在非MS windows平台执行。

KKman :第一个结合tel与分页浏览的综合浏览器, 另附有ANSI彩色编辑器, 表情符号, 快捷键, 防闲置等功能 并使用hyper-link使使用者可以用鼠标 *** 作tel接口,支援SSH1

BBman :以跨平台为诉求的tel浏览器, 为目前非MS windows平台最佳的tel client之一

AlienBBS:支援苹果电脑 Mac OS X 的tel客户端。

在UNIX环境下,透过tel程序就可连接BBS,因此大部份都是透过主控台(console)或终端机(Terminal)程序,执行tel程序连接BBS,透过终端机模拟和控制画面。这类终端机包含:iTerm、Terminal、xterm、rxvt、gnome-terminal、KDE-terminal。

在基于WEB方式访问的论坛程序中,大陆地区开发的主要有基于Perl语言的雷傲、基于ASP语言的动网、基于语言PHP的Discuz!及PHPWind。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13468111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-13
下一篇 2023-08-13

发表评论

登录后才能评论

评论列表(0条)

保存