linux中国_ 发布的文章

在下载并解压内核源代码后,用户可以看到许多文件夹和文件。尝试去找一个特定的文件或许是一个挑战。谢天谢地,源代码以一个特定的方式组织的。这使开发者能够轻松找到任何文件或者内核的一部分。

内核源代码的根目录下包含了以下文件夹

arch
block
crypto
Documentation
drivers
firmware
fs
include
init
ipc
kernel
lib
mm
net
samples
scripts
security
sound
tools
usr
virt

还有一些文件在源代码的根目录下。它们会在下面列出。

COPYING -许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。然而,没有人可以出售源代码。

CREDITS - 贡献者列表

Kbuild - 这是一个设置一些内核设定的脚本。打个比方,这个脚本设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。

Kconfig - 这个脚本会在开发人员配置内核的时候用到,这会在以后的文章中讨论。

MAINTAINERS - 这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。当一个开发者在内核中发现一个问题,并希望能够报告给能够处理这个问题的维护者时,这是是很有用的。

Makefile - This script is the main file that is used to compile the kernel. This file passes parameters to the compiler as well as the list of files to compile and any other necessary information. 这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。

README - 这个文档提供给开发者想要知道的如何编译内核的信息。

REPORTING-BUGS - 这个文档提供如何报告问题的信息。

内核的代码是以“.c”或“.h”为扩展名的文件。 “.c”的扩展名表明内核是用众多的编程语言之一的C语言写的, “h”的文件是头文件,而他们也是用C写成。头文件包含了许多“.c”文件需要使用的代码,因为他们可以引入已有的代码而不是重新编写代码,这节省了程序员的时间。否则,一组执行相同的动作的代码,将存在许多或全部都是“c”文件。这也会消耗和浪费硬盘空间。(译注:头文件不仅仅可节省重复编码,而且代码复用也会降低代码错误的几率)

所有上面列出的文件夹中的文件都组织得很好。文件夹名称至少可以帮助开发人员很好地猜测文件夹中的内容。下面提供了一个目录树和描述。

arch - 这个文件夹包含了一个Kconfig文件,它用于设置这个目录里的源代码编译所需的一系列设定。每个支持的处理器架构都在它相应的文件夹中。如,Alpha处理器的源代码在alpha文件夹中。请记住,随着时间的推移,一些新的处理器将被支持,有些会被放弃。对于Linux v3.9.4,arch下有以下文件夹:

alpha
arc
arm
arm64
avr32
blackfin
c6x
cris
frv
h8300
hexagon
ia64
m32r
m68k
metag
microblaze
mips
mn10300
openrisc
parisc
powerpc
s390
score
sh
sparc
tile
um
unicore32
x86
xtensa

block – 此文件夹包含块设备驱动程序的代码。块设备是以数据块方式接收和发送的数据的设备。数据块都是一块一块的数据而不是持续的数据流。

crypto - 这个文件夹包含许多加密算法的源代码。例如,“sha1\_generic.c”这个文件包含了SHA1加密算法的代码。

Documentation - 此文件夹包含了内核信息和其他许多文件信息的文本文档。如果开发者需要一些信息,他们也许能在这里找到所需要的信息。

drivers - 该目录包含了驱动代码。驱动是一个控制硬件的软件。例如,要让计算机知道键盘并使其可用,键盘驱动是必要的。这个文件夹中存在许多文件夹。每个文件夹都以硬件的种类或者型号命名。例如,'bluetooth'包含了蓝牙驱动程序的代码。还有其他很明显的驱动像SCSI、USB和火线等。有些驱动程序可能会比较难找到。例如,操纵杆驱动不在'joystick'文件夹中,它们却在./drivers/input/joystick。同样键盘和鼠标驱动也在这个input文件夹中。 'Macintosh'包含了苹果的硬件代码。 'Xen'包含了Xen hypervisor代码。(hypervisor是一种允许用户在一台计算机上运行多个操作系统的软件或硬件。这意味着在Xen允许用户在一台计算机上同时运行的两个或两个以上的Linux系统。用户还可以运行Windows,Solaris,FreeBSD或其他操作系统在Linux系统上。)driver文件夹下还有许多其他的文件夹,但他们在这篇文章中无法一一列举,他们将在以后的文章中提到。

firmware - fireware中包含了让计算机读取和理解从设备发来的信号的代码。举例来说,一个摄像头管理它自己的硬件,但计算机必须了解摄像头给计算机发送的信号。Linux系统会使用vicam固件(firmware)来理解摄像头的通讯。否则,没有了固件,Linux系统将不知道如何处理摄像头发来的信息。另外,固件同样有助于将Linux系统发送消息给该设备。这样Linux系统可以告诉摄像头重新调整或关闭摄像头。

fs - 这是文件系统的文件夹。理解和使用的文件系统所需要的所有的代码就在这里。在这个文件夹里,每种文件系统都有自己的文件夹。例如,ext4文件系统的代码在ext4文件夹内。 在fs文件夹内,开发者会看到一些不在文件夹中的文件。这些文件用来控制整个文件系统。例如,mount.h中会包含挂载文件系统的代码。文件系统是以结构化的方式来存储和管理的存储设备上的文件和目录。每个文件系统都有自己的优点和缺点。这是由文件系统的设计决定的。举例来说,NTFS文件系统支持的透明压缩(当启用时,会在用户不知道的情况下自动压缩存储文件)。大多数文件系统缺乏此功能,但如果在fs文件夹里编入相应的文件,它们也有这种能力。

include - include包含了内核所需的各种头文件.这个名字来自于C语言用"include"来在编译时导入头文件。

init - init文件夹包含了内核启动的处理代码(INITiation)。main.c是内核的核心文件,这是用来衔接所有的其他文件的源代码主文件。

ipc - IPC代表进程间通讯。此文件夹中的代码是作为内核与进程之间的通信层。内核控制着硬件,因此程序只能请求内核来执行任务。假设用户有一个打开DVD托盘的程序。程序不直接打开托盘,相反,该程序通知内核托盘应该被打开。然后,内核给硬件发送一个信号去打开托盘。这些代码同样管理kill信号。举例来说,当系统管理员打开进程管理器去关闭一个已经锁死的程序,这个关闭程序的信号被称为kill信号。内核接收到信号,然后内核会要求程序停止或直接把进程从内存和CPU中移除(取决于kill的类型)。命令行中的管道同样用于进程间通信。管道会告诉内核在某个内存页上写入输出数据。程序或者命令得到的数据是来自内存页上的某个给定的指针。

kernel - 这个文件夹中的代码控制内核本身。例如,如果一个调试器需要跟踪问题,内核将使用这个文件夹中代码来将内核指令通知调试器跟踪内核进行的所有动作。这里也有跟踪时间的代码。在内核文件夹下有个"power"文件夹,这里的代码可以使计算机重新启动、关机和挂起。

lib - 这个文件夹包含了内核需要引用的一系列内核库文件代码。

mm - mm文件夹中包含了内存管理代码。内存并不是任意存储在RAM芯片上的。相反,内核小心地将数据放在RAM芯片上。内核不会覆盖任何正在使用或保存重要数据的内存区域。

net - net文件夹中包含了网络协议代码。这包括IPv6、AppleTalk、以太网、WiFi、蓝牙等的代码,此外处理网桥和DNS解析的代码也在net目录。

samples - 此文件夹包含了程序示例和正在编写中的模块代码。假设一个新的模块引入了一个想要的有用功能,但没有程序员说它已经可以正常运行在内核上。那么,这些模块就会移到这里。这给了新内核程序员一个机会通过这个文件夹来获得帮助,或者选择一个他们想要协助开发的模块。

scripts - 这个文件夹有内核编译所需的脚本。最好不要改变这个文件夹内的任何东西。否则,您可能无法配置或编译内核。

security - 这个文件夹是有关内核安全的代码。它对计算机免于受到病毒和黑客的侵害很重要。否则,Linux系统可能会遭到损坏。关于内核的安全性,将在以后的文章中讨论。

sound - 这个文件夹中包含了声卡驱动。

tools - 这个文件夹中包含了和内核交互的工具。

usr - 还记得在以前的文章中提到vmlinuz和其他类似的文件么?这个文件夹中的代码在内核编译完成后创建这些文件。

virt - 此文件夹包含了虚拟化代码,它允许用户一次运行多个操作系统。这与先前提到的Xen是不同的。通过虚拟化,客户机操作系统就像任何其他运行在Linux主机的应用程序一样运行。通过Xen这样的hypervisor(注:虚拟机管理程序),两个操作系统可以同时管理硬件。在虚拟化中,在客户机操作系统上运行在Linux内核上,而在hypervisor中,它没有客户系统并且所有的系统不互相依赖。

提示: 绝不在内核源代码内移动文件,除非你知道你在做什么。否则,编译会由于缺失文件失败。

Linux内核的文件夹结构保持相对稳定。内核开发者会做一些修改,但总体来说,这些设置对整个内核版本都是一样。驱动程序文件夹的布局也基本保持一样。

via: http://www.linux.org/threads/the-linux-kernel-the-source-code.4204/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果你是个Linux命令行用户,你肯定会使用df命令检查文件系统的磁盘使用情况。尽管df是一个受欢迎的命令,但仍然不能提供一些高级的功能,如一个用户实际的磁盘可用空间,以及各种有用的显示格式等。还有另一个命令行实用工具可用,不仅提供了这些高级功能也提供了df的所有特性。在本文中,我们将讨论磁盘信息工具 -- di

注释 - 如果你想了解 df 更多信息, 查看 df命令教程.

di - 磁盘信息工具

从这个di帮助手册页很明显的发现 di 提供了一些很有价值的特性,值得一试。让我们看一些这个工具实际使用的例子。

测试环境

  • OS – Ubuntu 13.04
  • Shell – Bash 4.2.45
  • Application – di 4.30

一个简短的教程

下面是一些 di 工具的示例:

1. 默认的输出

默认情况下di命令生成人们易读的输出格式

这里有个示例:

$ di
Filesystem         Mount               Size     Used    Avail %Used  fs Type 
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4    
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs

所以你能发现用千兆字节(G)和兆字节(M)做磁盘使用情况的数据单位。这绝对是比 df 默认的输出产生的效果好。(译注:df也可以输出带类似单位的显示,只是需要额外加参数 -h)

2. 用 -A 选项打印类似挂载点、特殊设备名称等全部字段

选项 -A可以用来极详细的打印挂载点,特殊设备名称等。

这里有个示例:

$ di -A
Mount fs Type  Filesystem 
     Options                             
        Size     Used     Free %Used  %Free 
        Size     Used    Avail %Used  %Free 
        Size     Used    Avail %Used  
       Inodes     Iused     Ifree %Iused
/     ext4     /dev/sda6  
    rw,errors=remount-ro                
       28.1G    20.2G     8.0G   72%    28%  
       28.1G    21.6G     6.5G   77%    23%  
       26.7G    20.2G     6.5G   75%  
      1884160    389881   1494279   21% 
/dev  devtmpfs udev       
    rw,mode=0755                        
        1.5G     0.0G     1.5G    0%   100%  
        1.5G     0.0G     1.5G    0%   100%  
        1.5G     0.0G     1.5G    0%  
       381805       571    381234    0% 
/run  tmpfs    tmpfs      
    rw,noexec,nosuid,size=10%,mode=0755 
      300.2M     0.9M   299.3M    0%   100%  
      300.2M     0.9M   299.3M    0%   100%  
      300.2M     0.9M   299.3M    0%  
       384191       549    383642    0%

所以你可以看到所有的字段,可以用于调试目的时打印输出。

3. 用 -a选项打印所有挂载设备

这里是个示例:

$ di -a
Filesystem         Mount               Size     Used    Avail %Used  fs Type        
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4           
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs       
devpts             /dev/pts            0.0M     0.0M     0.0M    0%  devpts         
proc               /proc               0.0M     0.0M     0.0M    0%  proc           
binfmt_misc        /proc/sys/fs/bi     0.0M     0.0M     0.0M    0%  binfmt_misc    
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs          
none               /run/lock           0.0M     0.0M     0.0M    0%  tmpfs          
none               /run/shm            0.0M     0.0M     0.0M    0%  tmpfs          
none               /run/user           0.0M     0.0M     0.0M    0%  tmpfs          
gvfsd-fuse         /run/user/himan     0.0M     0.0M     0.0M    0%  fuse.gvfsd-fuse
sysfs              /sys                0.0M     0.0M     0.0M    0%  sysfs          
none               /sys/fs/cgroup      0.0M     0.0M     0.0M    0%  tmpfs          
none               /sys/fs/fuse/co     0.0M     0.0M     0.0M    0%  fusectl        
none               /sys/kernel/deb     0.0M     0.0M     0.0M    0%  debugfs        
none               /sys/kernel/sec     0.0M     0.0M     0.0M    0%  securityfs

所以你能看到与所有设备相关的所有信息,被打印出来了。

4. 用 -c 选项用逗号作为值的分隔符

选项 -c 用命令分隔的值将附上双引号

这里是个示例:

$ di -c
s,m,b,u,v,p,T
/dev/sda6,/,28.1G,20.2G,6.5G,77%,ext4
udev,/dev,1.5G,0.0G,1.5G,0%,devtmpfs
tmpfs,/run,300.2M,0.9M,299.3M,0%,tmpfs

如上,你可以看到打印了用逗号分隔符输出的值。(译注:这种输出便于作为其他程序的输入解析)

5. 用 -g 选项通过千兆字节(G)打印大小

下面是个示例:

$ di -g
Filesystem         Mount              Gibis     Used    Avail %Used  fs Type 
/dev/sda6          /                   28.1     20.2      6.5   77%  ext4    
udev               /dev                 1.5      0.0      1.5    0%  devtmpfs
tmpfs              /run                 0.3      0.0      0.3    0%  tmpfs

当然,你能看到所有与大小有关的值都用千兆字节(G)打印出来。

同样的你可以用 -k 和 -m 选项来分别的显示千字节(K)大小和兆字节(M)大小。

6. 通过 -I 选项显示特定的文件系统类型的相关信息

假设你想显示只跟tmpfs文件系统相关的信息。下面将告诉你如何用 -I 选项完成任务。

$ di -I tmpfs
Filesystem         Mount               Size     Used    Avail %Used  fs Type
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs  
none               /run/lock           5.0M     0.0M     5.0M    0%  tmpfs  
none               /run/shm            1.5G     0.0G     1.5G    0%  tmpfs  
none               /run/user         100.0M     0.0M   100.0M    0%  tmpfs  
none               /sys/fs/cgroup      0.0M     0.0M     0.0M    0%  tmpfs

Ok 你能看到只有tmpfs类型相关文件系统信息被输出并显示出来了。

7. 用 -n 选项跳过标题行的输出

如果你正试图通过一个脚本(或程序)解析该命令的输出结果并希望 di 命令跳过显示的标题行,那么用 -n 选项是绝佳的方法。

下面是个示例:

$ di -n
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4    
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs

如上,你能发现输出中并没有显示标题行。

8. 通过 -t 选项在文件系统列表底下再打印一行总计行

如果想要显示所有相关列的总数,用 -t 选项。

示例:

$ di -t
Filesystem         Mount               Size     Used    Avail %Used  fs Type 
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4    
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs   
                   Total              29.9G    20.2G     8.3G   72%

观察到最后一行的值为所有文件系统的统计数据。

9. 通过 -s 选项 排序输出

-s选项可用于排序该命令的输出结果(译注:默认按照挂载点名称排序)

下面告诉你如何反向排序输出:

$ di -sr
Filesystem         Mount               Size     Used    Avail %Used  fs Type
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4

你也可以在-s后添加子选项'r'逆序排序输出。

类似的,你可以使用 -s 选项做一些其他类型的排序.以下是摘自man手册供您参考:

-s 排序方式

可以指定排序方式。默认排序方式的按照挂载点的名称进行排序。支持如下的排序方式:

m :按照挂载点名称排序(默认)

n :不排序(即按照在挂载表/etc/fstab中的顺序)

s :按照特殊设备名称

t :按照文件系统类型

r :逆序排序

排序方式可以组合使用,如: di --stsrm :按照类型、设备、挂载点逆序排序。di --strsrm :按照类型、设备逆序、挂载点逆序排序。

10. 通过 -f 选项指定输出格式

你可以通过结合-f选项和其子选项指定输出格式字符串。

例如,用 -fm,打印挂载点的名称。

示例:

$ di -fm
Mount          
/              
/dev          
/run

如上你可以看到只有挂载点的名字被打印出来。

同样的,打印文件系统的类型,用 -ft

示例:

$ di -ft
fsType 
ext4   
devtmpf
tmpfs

如果你想快速查找,这里有个其他可用的格式选项截图.

更完整的选项,参考di命令man文档

下载/安装

这里有一些关于di命令的重要链接:

命令行工具 di 也能通过apt、yum等命令在命令行下载和安装。Ubuntu用户也可以从Ubuntu 软件中心下载这个命令。

优点

  • 提供了许多高级功能
  • 跨平台

缺点

  • 在大多数的Linux发行版没有预装
  • 大量选项需要学习

结论

最后,di命令提供了一些非常有用的特性,比df命令更强大。如果你正在寻找一个类似df,但比df更强大的关于磁盘信息的命令行工具,那么di是最理想的选择。试试吧,包你满意!!!

你试过di或任何其他类似df工具?请跟我们分享你的经验!

via: http://mylinuxbook.com/di-a-disk-information-utility/

译者:Luoxcat 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Ubuntu 13.10 已经发布了,对于那些打算安装“纯净版”的用户,安装完系统后你可以考虑下面的8件事。

1. 安装一些绚丽的小零件

系统负载 是系统监控工具GNOME里的一个小应用。它能在面板上展示出CPU、内存、网络使用、硬盘I/O等信息。点击下面的按钮从Ubuntu软件中心安装。

或者通过命令行进行安装:

sudo apt-get install indicator-multiload

CPU频率是一款等效于“GNOME-CPU调频”的应用。你可以实时的调整CPU的频率。点击下面的按钮从Ubuntu软件中心安装。

或者通过命令行安装:

sudo apt-get install indicator-cpufreq

我的天气是一款显示当前天气的应用,它能显示5天内的预报并支持四大天气服务站点:OpenWeatherMap, Yahoo, Wunderground 和 World Weather Online。

通过命令行进行安装:

sudo add-apt-repository ppa:atareao/atareao

sudo apt-get update

sudo apt-get install my-weather-indicator

Variety一款带有AppIndicator的应用,但是基本上你只需要配置一次就可以用指示器来使用此软件了。Variety是一款很酷的壁纸更换的应用,他能在设定的时间内自动下载并更换壁纸。用起来就有种高帅富的感觉。壁纸库每天都会有更新,你可以很快的切换到另外一个壁纸,收藏自己喜欢的壁纸,留着日后再用。

通过以下命令行安装:

sudo add-apt-repository ppa:peterlevi/ppa

sudo apt-get update

sudo apt-get install variety

你可能还需要一个剪切板管理器,试试Diodon 吧,这是款轻量型软件,支持文件、图像等。点击下面的按钮安装:

或者通过命令行安装:

sudo apt-get install diodon diodon-plugins

2. 设置 Unity

Unity Tweak Tool让用户能改变一些Unity设置,比如:自动隐藏、窗口最大化、“触发角”、Dash、Unity启动器或平视显示器、改变GTK或图标主题、改变字体和大小,移动窗口控制器到右边等。

点击下面的按钮从软件中心安装

或者通过命令行安装

sudo apt-get install unity-tweak-tool

3. 隐私设置

你应该知道可以通过默认的Dash来查看最近访问的文件和其他的一些文件。系统设置可以通过设置“安全和隐私”来选择显示的文件类型。这样就不用看到那些软件、文件夹之类的了。你也可以清除最近的记录。

此外你在使用搜索框的时候,可以设定不显示网络搜索的结果。但是这会屏蔽掉所有的网络信息。所以当你仅仅是想“屏蔽购物推荐”的话,你可以输入下面的命令:

gsettings set com.canonical.Unity.Lenses disabled-scopes "['more_suggestions-amazon.scope', 'more_suggestions-u1ms.scope', 'more_suggestions-populartracks.scope', 'music-musicstore.scope', 'more_suggestions-ebay.scope', 'more_suggestions-ubuntushop.scope', 'more_suggestions-skimlinks.scope']"

更多插件屏蔽,点击此处

另外一种在Ubuntu 13.10中设置隐私的方法是使用隐私指示器,这是一款让你快捷设置启用/屏蔽Zeitgeist 或者在线搜索结果的软件,并能清除Zeitgeist日志和最近文件(显示先边栏的“最近”里面)。

下载 Privacy Indicator(此网页中含有deb文件下载)

4. 使用独立显卡的混合图形功能

Ubuntu的开发人员已经在Ubuntu 13.10 (和 12.04 LTS版 )中实现了混合显卡技术,下面你会看到相关设置的说明。

Nvidia Optimus:不幸的是,Linux平台下Nvidia显卡驱动并不完全支持Optimus,更多

但是Ubuntu 13.10用了“nvidia-prime”包来过渡。这个包使默认支持Intel显卡芯片的Optimus平台也支持Nvidia显卡。通过下面指令你能Nvidia显卡一直处于工作状态,就是说没有办法让它停止工作来节能了。这样笔记本就会功耗更大和过热--——对我而言,我是不会 用这个的,除非过热的问题解决了,如果没有解决的话,你可以取消这个设置。

再次不幸的是,这不是唯一的问题。你会发现画面分割和热插拔并不工作。所以,如果你想用多个显示器的话。你需要手动的在xorg.conf进行设置。这样的好处就是,你可以玩那些不支持Intel显卡的游戏,用支持VDPAU的媒体播放器等。

即便如此,如果你还是想尝试一下的话,请确保你使用的是默认的显示管理器LightDM,并不是其他的,如GDN等。此外,如果你安装了Bumblebee,你需要卸载掉它:

sudo apt-get purge bumblebee* bbswitch-dkms

然后安装最新的Nvidia驱动和“nvidia-prime”:

sudo apt-get install nvidia-319 nvidia-settings-319 nvidia-prime

最后重启电脑(重启X是不够)。

如果你想撤销这些改变,你可以输入通过下面的指令:

sudo apt-get remove nvidia-319 nvidia-settings-319 nvidia-prime

然后重启

AMD 混合显卡:我并没有测试过这个,因为我没有支持AMD显卡的系统,但是根据Ubuntu wiki上的HybridGraphics包说明,应该是没有问题。(再次申明,我并不确定,因为我没试过)

要想在Ubuntu 13.10下获得合适的AMD显卡支持。你需要安装最新的 fglrx驱动和fglrx-pxpress:

sudo apt-get install fglrx fglrx-pxpress

并重启电脑。重启X是没有用的

5. 延长电池寿命

有两个工具可以延长电池的寿命:laptop-mode-tools 和 TLP。这两个工具都是为了延长电池寿命,TLP 似乎效果更好一点,但是TLP仅有PPA,如果你不想添加APPs时,就安装 laptop-mode-tools吧。

注意:不要同时安装laptop-mode-tools和TLP

点击下面的按钮安装laptop-mode-tools。

或者通过命令行安装:

sudo apt-get install laptop-mode-tools

输入下面命令安装TLP:

sudo add-apt-repository ppa:linrunner/tlp

sudo apt-get update

sudo apt-get install tlp tlp-rdw

sudo tlp start

这两个工具都不需要额外的配置。

另外一种节约电池的方法是Bumblebee(是允许在独显运行软件或游戏的工具),Bumblebee是一款支持笔记本上双显卡智能切换的软件。能停止Nvidia显卡,当你不需要使用的时候。

注意:如果你想在显卡自动切换技术的第4步采用混合显卡时,请不要安装Bumblebee

点击下面的按钮进行安装:

或输入下面的命令行:

sudo apt-get install bumblebee bumblebee-nvidia

然后重启。

在Ubuntu中有个禁止"optirun"工作的bug。通过下面的命令解决这个问题。

  • 32位系统
    sudo ln -s /usr/lib/i386-linux-gnu/libturbojpeg.so.0 /usr/lib/i386-linux-gnu/libturbojpeg.so
  • 64位系统
    sudo ln -s /usr/lib/x8664-linux-gnu/libturbojpeg.so.0 /usr/lib/x8664-linux-gnu/libturbojpeg.so

当你想用Nvidia显卡时,运行:

optirun APP-EXECUTABLE

将"APP-EXECUTABLE"替换为你要运行的软件或者游戏的可执行文件。

6. 安装编解码器, Java 和 加密DVD播放

如果需要播放更多类型的音频视频文件,那就安装 Ubuntu Restricted Extras

或者输入下面的命令行:

sudo apt-get install ubuntu-restricted-extras

我建议再安装一下“libavformat 和 libavcodec的无限制版”,这样当你使用一些编辑器或者转换器的时候就不会出现丢失编码丢失的情况。点击下面的按钮进行安装:

或者输入以下命令行:

sudo apt-get install libavformat-extra-53 libavcodec-extra-53

你可能需要Java,但是你得明确你到底需要的是什么,不少用户仅仅使用OpenJRE和java游览器插件,你可以点击下面的按钮安装:

或者输入下面的命令行:

sudo apt-get install icedtea-7-plugin openjdk-7-jre

如果用于开发,你可能需要OpenJDK,点击下面的按钮进行安装:

或者输入下面的命令行:

sudo apt-get install openjdk-7-jdk

如果你因为某些原因需要安装Oracle Java(包含JDK,JRE,游览器插件的包)时,你可以通过下面的命令进行安装Oracle Java 7

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java7-installer

加密DVD播放: 由于现在很多安装包都能在官方的库中找到,或者有更好的替代物,Medibuntu也渐渐的被废弃了。但是在播放加密视频时仍然需要livdvdcss包。

输入以下指令启动加密DVD播放功能:

sudo apt-get install libdvdread4

sudo /usr/share/doc/libdvdread4/install-css.sh

7. 安装最新的 Rhythmbox 和 VLC

在Ubuntu13.10中,Rhythmbox 和 VLC并没有升级到最新的版本,如果你想安装最新的版本,你可以使用PPAs

请注意:升级Rhythmbox后,里面的第三方插件将停止工作。Rhythmbox插件可以正常的运行。

Rhythmbox(Ubuntu 13.10下的版本:2.99.1,PPA中的版本:3.0.1):

sudo add-apt-repository ppa:jacob/media

sudo apt-get update

sudo apt-get install rhythmbox

VLC(Ubuntu 13.10下的版本:2.0.8,PPA中的版本:2.1.0):

sudo add-apt-repository ppa:videolan/stable-daily

sudo apt-get update

sudo apt-get install vlc

8. Tweak Nautilus: 打开被禁用的递归搜索和文件快速预览

在Nautilus V3.6之后,提前键入查找功能就被去除掉了。之后版本的搜索就只是在当前文件夹和其子文件下进行搜索。这用起来就很不爽了,如果你为此感到烦恼的话就安装Nautilus的补丁来启用被禁用的递归搜索(你可以很方便的启用它)。

用下面的命令将Nautilus升级到可以禁用递归搜过的版本

sudo add-apt-repository ppa:dr3mro/personal

sudo apt-get update

sudo apt-get upgrade

nautilus -q

然后使用下面的命令禁用递归搜索

gsettings set org.gnome.nautilus.preferences enable-recursive-search false

如果你还想恢复递归搜索的功能,使用下面的命令行:

gsettings set org.gnome.nautilus.preferences enable-recursive-search true

GNOME Sushi是一款快速预览的软件。点击下面的按钮安装。(会安装gnome-sushi 和 unoconv来实现预览)。

或者输入命令行:

sudo apt-get install gnome-sushi unoconv

要使用这个软件,需选择一个文件(图片、文本文档、音乐文件等)然后点击SPACE按钮来预览。再次点击SPACE按钮或者关闭窗口可以关闭预览。

现在!看完我们的介绍之后,你会选择哪个作为第一个安装的呢?

via: http://www.webupd8.org/2013/10/8-things-to-do-after-installing-ubuntu.html

译者:Timeszoro 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linus Torvalds非常欢迎Valve公司的SteamOS系统入驻Linux平台,表示它将大力推动Linux桌面系统的发展。

Linux之父大力赞扬Valve的“独到眼光”,表示这一合作将迫使其他生产商开始认真重视Linux,特别是游戏开发商们将开始摒弃Windows。

他在上周三爱丁堡举行的LinuxCon大会上说道,“我爱Steam —— 我认为这是一个能真正帮助Linux桌面系统的大好机会!”

Valve上个月发布了关于SteamOS的声明,表示这将是一种把PC游戏带入起居室的新体验。用户可以在自己任意的PC电脑上安装SteamOS,而Valve将在另一端负责SteamOS匹配各个生产商的硬件系统。

我爱Steam —— 我认为这是一个能真正帮助Linux桌面系统的大好机会!

硬件生产商们也将大力扩展对Windows以外系统的驱动程序支持,而SteamOS将以此获得更多游戏玩家和开发商的青睐。

说到这一点,就涉及到了Torvalds的痛处。去年Nvidia宣布放弃支持开源系统图形芯片的驱动开发,他对此进行了猛烈抨击。如今SteamOS选择了Linux,Nvidia的大门重新对Linux社区敞开,Torvalds预言这预示着新的发展机会即将到来。

他说,“我并不是说它单单只是帮助我们吸引显卡厂商的注意,它还迫使Linux的各个发行版意识到Steam是一个发展趋势,他们必须抓住这个趋势,因为一旦落下被孤立,发行版们是负担不起的,他们都想让人们在自己的平台上运行这套系统玩游戏。”

“这就是‘标准化’的最佳例证,”他说,“我认为好的标准能使人们事半功倍、信心满满,足以推动整个市场的发展。”

漂亮的登录窗口

Torvalds表示,Linux在桌面系统领域一直表现不佳的另一个原因是开发者们总是专注于毫无用处的用户体验特效(UX features)。

“Linux始终在各个领域表现都非常出色,但我还是对Linux桌面系统的现状多少有些失望,内耗、不干正事、一团糟。”

他还补充道,“我真心希望Linux的各个桌面系统能携起手来,更多专注于技术,而不是总想着如何让登陆窗口看起来更漂亮。”

Torvalds并没有提到某个具体的公司,但之前他曾对Google的Chromebook Pixel大加赞赏,认为跟基于Linux的Chrome OS比起来,其他PC就是一坨“crap”(译者注,这个单词读shi,第三声)。

via: http://www.pcpro.co.uk/news/384934/torvalds-steamos-will-really-help-linux-on-desktop

译者:Mr小眼儿 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux之父说他将一直奋战在OS第一线,直到某天他感到厌烦,或是医生诊断他无法再继续为止。

苹果最新发布的免费操作系统,OS X Mavericks,将不会对Linux操作系统造成任何影响。Linux的创造者Linus Torvalds如是说道。

本周三,爱丁堡,欧洲LinuxCon大会,Torvalds在其中一次访谈中说,Linux作为操作系统已经走过了22个年头,而苹果在周二关于免费提供操作系统的决定和Linux的哲学相比,是完全不同的,事实上,Torvalds说自己使用开源产品而不是免费软件,其中一个原因就是,开源和免费有根本上的不同。

虽然苹果的Mavericks更新可能是免费的,但是它并不开源,人们如果想要使用该操作系统,仍然需要购买昂贵的硬件。他说:“事实上,苹果推出的免费OS完全是一个和免费毫不相干的噱头,我认为它完全不会影响到Linux。”

当被问道什么情况下选择退休的时候,Torvalds说他一直以来从未考虑过退休,“关于这个,大伙儿还是省省心吧,等到时候再说。”但他表示,如果将来某一天,他觉得自己写不动代码,或是医生告诉他应该停止的时候,他就会退休。

最近这些天Torvalds仍旧不打算做太多编程方面的工作,他还在享受各种各样的会议和访谈,他说,“人们只是认识我而已,(其实他们并不了解我)”。据Torvalds讲,尽管有时他会形容开发者们拥有像“雨林低等微生物般的注意力时间”,但当内核开发者和运维人员找到他的时候,他还是会有求必应。除此以外,他还说自己所承担的另一部分职责是能够适时地否决,“No,我们不能这么干!”

Torvalds说,即使自己受到很多人的打击和质疑,但Linux仍将继续一往无前。20多年来有数千人参与到Linux的开发中,有的人从最开始一直坚持到了现在,“我们的开发团队拥有难以置信的人员储备深度”。

他说,“我是个公众人物,人们都认识我,知道我如何工作。这意味着,他们可能并不总是喜欢我的所作所为、所说所想,但是人们可以相信,我有自己独特的一套行为方式,这很重要。”当被问及为何有时会发怒上火,他补充道,“然而,还有些人确实很不礼貌,可以给这些人‘打打补丁’。”

Torvalds说他并没有若干年内终止Linux的计划。“我从没有过这样的计划,将来也不会有。这就像生物学中的进化论:进化不会终止。Linux的生存也是如此。”他说,Linux将会一直以同样的方式持续进化和改进。

“我不知道Linux最终将去往何方,但我并因此不担心,就让一切顺其自然吧……”

via: http://www.infoworld.com/t/linux/torvalds-apples-free-os-no-threat-linux-229355

译者:Mr小眼儿 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

即使关系型数据库依然是非常有用的工具,但它们持续几十年的垄断地位就要走到头了。现在已经存在无数能撼动关系型数据库地位的 NoSQL,当然,这些 NoSQL 还无法完全取代它们。(也就是说,关系型数据库还是处理关系型事务的最佳方式。)

NoSQL 与 NoSQL 之间的区别,要远大于不同的 SQL 数据库之间的区别,所以软件架构师必须要在项目一开始就选好一款合适的 NoSQL。

考虑到这种情况,本文为大家介绍以下几种 NoSQL 之间的区别:Cassandra, Mongodb, CouchDB, Redis, Riak, Couchbase (ex-Membase), Hypertable, ElasticSearch, Accumulo, VoltDB, Kyoto Tycoon, Scalaris, Neo4jHBase

最流行的 NoSQL

MongoDB 2.2版

开发语言: C++

主要特性: 保留 SQL 中一些用户友好的特性(查询、索引等)

许可证: AGPL (驱动: 采用Apache许可协议)

数据传输格式: 自定义,二进制( BSON 文档格式)

  • 主/从备份(支持自动故障切换功能)
  • 自带数据分片功能
  • 通过 javascript 表达式提供数据查询
  • 服务器端完全支持 javascript 脚本
  • 比 CouchDB 更好的升级功能
  • 数据存储使用内存映射文件技术
  • 功能丰富,性能不俗
  • 最好开启日志功能(使用 --journal 参数)
  • 在 32 位系统中,内存限制在 2.5GB
  • 空数据库占用 192MB 空间
  • 使用 GridFS(不是真正的文件系统)来保存大数据和元数据
  • 支持对地理数据建立索引
  • 可用于数据中心

应用场景:

  • 动态查询
  • 喜欢定义索引,而不是使用 map/reduce 功能
  • 高性能的大数据访问
  • 想使用 CouchDB 但数据变化频度太大

使用案例:

想布署 MySQL 或 PostgreSQL,但预先定义数据字典让你望而却步。这个时候,MongoDB 是你可以考虑的选项

Riak 1.2版

开发语言: Erlang、C、以及一些 JavaScript

主要特性: 容错机制(当一份数据失效,服务会自动切换到备份数据,保证服务一直在线 —— 译者注)

许可证: Apache

数据传输格式: HTTP/REST 架构,或自定义二进制格式

  • 可存储 BLOB(binary large object,二进制大对象,比如一张图片、一个声音文件 —— 译者注)
  • 可在分布式存储和复制存储之间作协调
  • 为了保证可验证性和安全性,Riak 在 JS 和 Erlaing 中提供提交前(pre-commit)和提交后(post-commit)钩子(hook)函数(你可以在提交数据前执行一个 hook,或者在提交数据后执行一个 hook —— 译者注)
  • JS 和 Erlang 提供映射和简化(map/reduce)编程模型
  • 使用 links 和 link walking ,用于图形化数据库(link 用于描述对象之间的关系,link walking 是一个用于查询对象关系的进程 —— 译者注)
  • 次要标记(secondaty indeces,开发者在写数据时可用多个名称来标记一个对象 —— 译者注),一次只能用一个
  • 支持大数据对象(Luwak)(Luwak 是 Riak 中的一个服务层,为大数据量对象提供简单的、面向文档的抽象,弥补了 Riak 的 Key/Value 存储格式在处理大数据对象方面的不足 —— 译者注)
  • 提供“开源”和“企业”两个版本
  • 基于Riak搜索的全文检索、建立索引和查询
  • 正在将存储后端从“Bitcask”迁移到 Google 的“LevelDB”上
  • 企业版本提供无主模式的多点复制(各点地位平等,非主从架构)和SNMP监控功能

应用场景:

  • 假如你想要类似 Dynamo 的数据库,但不想要它的庞大和复杂
  • 假如你需要良好的单点可扩展性、可用性和容错能力,但不想为多点备份买单。

使用案例:

销售点数据收集;工厂控制系统;必须实时在线的系统;需要易于升级的网站服务器

CouchDB 1.2版

开发语言: Erlang

主要特性: 数据一致性;易于使用

许可证: Apache

数据传输格式: HTTP/REST

  • 双向复制!(一种同步技术,每个备份点都有一份它们自己的拷贝,允许用户在存储点断线的情况下修改数据,当存储节点重新上线时,CouchDB 会对所有节点同步这些修改 —— 译者注)
  • 支持持续同步或者点对点同步
  • 支持冲突检测
  • 支持主主互备!(多个数据库实时同步数据,起到备份和分摊用户并行访问量的作用 —— 译者注)
  • 多版本并发控制(MVCC),写操作时不需要阻塞读操作(或者说不需要锁住数据库的读取操作)
  • 向下兼容以前版本的数据
  • 可靠的 crash-only 设计(所谓 crash-only,就是程序出错时,只需重启下程序,丢弃内存的所有数据,不需要执行复杂的数据恢复操作 —— 译者注)
  • 需要实时压缩数据
  • 视图(文档是 CouchDB 的核心概念,CouchDB 中的视图声明了如何从文档中提取数据,以及如何对提取出来的数据进行处理 —— 译者注):内嵌映射和简化(map/reduce)编程模型
  • 格式化的views字段:lists(包含把视图运行结果转换成非 JSON 格式的方法)和 shows(包含把文档转换成非 JSON 格式的方法)(在 CouchDB 中,一个 Web 应用是与一个设计文档相对应的。在设计文档中可以包含一些特殊的字段,views 字段包含永久的视图定义 —— 译者注)
  • 能够进行服务器端文档验证
  • 能够提供身份认证功能
  • 通过 \_changes 函数实时更新数据!
  • 链接处理(attachment:couchDB 的每份文档都可以有一个 attachment,就像一份 email 有它的网址 —— 译者注)
  • 有个 CouchApps(第三方JS的应用)

应用场景:

  • 用于随机数据量多、需要预定义查询的地方
  • 用于版本控制比较重要的地方

使用案例:

可用于客户关系管理(CRM),内容管理系统(CMS);可用于主主互备甚至多机互备

Redis 2.4版

开发语言: C/C++

主要特性: 快到掉渣

许可证: BSD

数据传输格式: 类似 Telnet 式的交换

  • Redis 是一个内存数据库(in-memory database,简称 IMDB,将数据放在内存进行读写,这才是“快到掉渣”的真正原因 —— 译者注),磁盘只是提供数据持久化(即将内存的数据写到磁盘)的功能(这类数据库被称为“disk backed”数据库)
  • 当前不支持将磁盘作为 swap 分区,虚拟内存(VM)和 Diskstore 方式都没加到此版本(Redis 的数据持久化共有4种方式:定时快照、基于语句追加、虚拟内存、diskstore。其中 VM 方式由于性能不好以及不稳定的问题,已经被作者放弃,而 diskstore 方式还在实验阶段 —— 译者注)
  • 主从备份
  • 存储结构为简单的 key/value 或 hash 表
  • 但是操作比较复杂,比如:ZREVRANGEBYSCORE
  • 支持 INCR(INCR key 就是将key中存储的数值加一 —— 译者注)命令(对限速和统计有帮助)
  • 支持sets数据类型(以及 union/diff/inter)
  • 支持 lists (以及 queue/blocking pop)
  • 支持 hash sets (多级对象)
  • 支持 sorted sets(高效率的表,在范围查找方面有优势)
  • 支持事务处理!
  • 缓存中的数据可被标记为过期
  • Pub/Sub 实现了消息订阅和推送!

应用场景:

  • 适合布署快速多变的小规模数据(可以完全运行在存在中)

使用案例:

股价系统、分析系统、实时数据收集系统、实时通信系统、以及取代 memcached

Google Bigtable 的衍生品

HBase 0.92.0 版

开发语言: Java

主要特性: 支持几十亿行*几百万列的大表

许可证: Apache

数据传输格式: HTTP/REST (也支持 Thrift 开发框架)

  • 仿造 Google 的 BigTable
  • 使用 Hadoop 的 HDFS 文件系统作为存储
  • 使用 Hadoop 的映射和简化(map/reduce)编程模型
  • 查询条件被推送到服务器端,由服务器端执行扫描和过滤
  • 对实时查询进行优化
  • 高性能的 Thrift gateway(访问 HBase 的接口之一,特点是利用 Thrift 序列化支持多种语言,可用于异构系统在线访问 HBase 表数据 —— 译者注)
  • 使用 HTTP 通信协议,支持 XML、Protobuf 以及二进制格式
  • 支持基于 Jruby(JIRB)的shell
  • 当配置信息有更改时,支持 rolling restart(轮流重启数据节点)
  • 随机读写性能与 MySQL 一样
  • 一个集群可由不同类型的结点组成

应用场景:

  • Hadoop 可能是在大数据上跑 Map/Reduce 业务的最佳选择
  • 如果你已经搭建了 Hadoop/HDFS 架构,HBase 也是你最佳的选择。

使用案例:

搜索引擎;日志分析系统;扫描大型二维非关系型数据表。

Cassandra 1.2版

开发语言: Java

主要特性: BigTable 和 Dynamo的完美结合(Cassandra 以 Amazon 专有的完全分布式的 Dynamo 为基础,结合了Google BigTable基于 Column Family 的数据模型 —— 译者注)

许可证: Apache

数据传输格式: Thrift 和自定义二进制 CQL3(即 Cassandra 查询语言第3版 —— 译者注)

  • 可以灵活调整对数据的分布式或备份式存储(通过设置N,R,W之间的关系)(NRW是数据库布署模型中的概念,N是存储网络中复制数据的节点数,R是网络中读数据的节点数,W是网络中写数据的节点数。一个环境中N值是固定的,设置不同的WR值组合能在数据可用性和数据一致性之间取得不同的平衡,可参考 CAP 定理 —— 译者注)
  • 按列查询,按keys值排序后存储(需要包含你想要搜索的任何信息)(Cassandra 的数据模型借鉴自 BigTable 的列式存储,列式存储可以理解成这样,将行ID、列簇号,列号以及时间戳一起,组成一个Key,然后将Value按Key的顺序进行存储 —— 译者注)
  • 类似 BigTable 的特性:列、列簇
  • 支持分布式 hash 表,使用“类 SQL” 语言 —— CQL(但没有 SQL 中的 JOIN 语句)
  • 可以为数据设置一个过期时间(使用 INSERT 指令)
  • 写性能远高于读性能(读性能的瓶颈是磁盘 IO)
  • 可使用 Hadoop 的映射和简化(map/reduce)编程模型
  • 所有节点都相似,这点与 Hadop/HBase 架构不同
  • 可靠的跨数据中心备份解决方案

应用场景:

  • 写操作多于读操作的环境(比如日志系统)
  • 如果系统全部由 JAVA 组成(“没人会因为使用了 Apache 许可下的产品而被炒鱿鱼”(此句貌似是网上有人针对“Apache considered harmful”一文所作的回应 —— 译者注))

使用案例:

银行、金融机构;写性能强于读性能,所以 Cassandra 天生就是用来作数据分析的。

Hypertable 0.9.6.5版

开发语言: C++

主要特性: HBase 的精简版,但比 HBase 更快

许可证: GPL 2.0

数据传输格式: Thrift,C++库,或者 HQL shell

  • 采用与 Google BigTable 相似的设计
  • 运行在 Hadoop HDFS 之上
  • 使用自己的“类 SQL”语言 —— HQL
  • 可以根据 key 值、单元(cell)进行查找,可以在列簇上查找
  • 查询数据可以指定 key 或者列的范围
  • 由百度公司赞助(百度早在2009年就成为这个项目的赞助商了 —— 好吧译者表示有点大惊小怪了:P)
  • 能保留一个值的 N 个历史版本
  • 表在命名空间内定义
  • 使用 Hadoop 的 Map/reduce 模型

应用场景:

  • 假如你需要一个更好的HBase,就用Hypertable吧

使用案例:

与HBase一样,就是搜索引擎被换了下;分析日志数据的系统;适用于浏览大规模二维非关系型数据表。

Accumulo 1.4版

开发语言: Java 和 C++

主要特性: 一个有着单元级安全的 BigTable

许可证: Apache

数据传输格式: Thrift

  • 另一个 BigTable 的复制品,也是跑在 Hadoop 的上层
  • 单元级安全保证
  • 允许使用比内存容量更大的数据列
  • 通过 C++ 的 STL 可保持数据从 JAVA 环境的内存映射出来
  • 使用 Hadoop 的 Map/reduce 模型
  • 支持在服务器端编程

应用场景:

  • HBase的替代品

使用案例:

与HBase一样,就是搜索引擎被换了下;分析日志数据的系统;适用于浏览大规模二维非关系型数据表。

特殊用途

Neo4j V1.5M02 版

开发语言: Java

主要特性: 图形化数据库

许可证: GPL,AGPL(商业用途)

数据传输格式: HTTP/REST(或内嵌在 Java 中)

  • 可独立存在,或内嵌在 JAVA 的应用中
  • 完全的 ACID 保证(包括正在处理的数据)
  • 节点和节点的关系都可以拥有原数据
  • 集成基于“模式匹配”的查询语言(Cypher)
  • 支持“Gremlin”图形转化语言
  • 可对节点与节点关系进行索引
  • 良好的自包含网页管理技术
  • 多个算法实现高级文件查找功能
  • 可对 key 与 key 的关系进行索引
  • 优化读性能
  • 在 JAVA API 中实现事务处理
  • 可运行脚本 Groovy 脚本
  • 在商用版本中提供在线备份,高级监控和高可用性功能

应用场景:

  • 适用于用图形显示复杂的交互型数据。

使用案例:

搜寻社交关系网、公共传输链、公路路线图、或网络拓扑结构

ElasticSearch 0.20.1 版

开发语言: Java

主要特性: 高级搜索

许可证: Apache

数据传输格式: 通过 HTTP 使用 JSON 进行数据索引(插件:Thrift, memcached)

  • 以 JSON 形式保存数据
  • 提供版本升级功能
  • 有父文档和子文档功能
  • 文档有过期时间
  • 提供复杂多样的查询指令,可使用脚本
  • 支持写操作一致性的三个级别:ONE、QUORUM、ALL
  • 支持通过分数排序
  • 支持通过地理位置排序
  • 支持模糊查询(通过近似数据查询等方式实现)
  • 支持异步复制
  • 自动升级,也可通过设置脚本升级
  • 可以维持自动的“统计组”(对调试很有帮助)
  • 只有一个开发者(kimchy)

应用场景:

  • 当你有可伸缩性很强的项目并且想拥有“高级搜索”功能。

使用案例:

可布署一个约会服务,提供不同年龄、不同地理位置、不同品味的客户的交友需求。或者可以布署一个基于多项参数的排行榜。

其他

(不怎么有名,但值得在这里介绍一下)

Couchbase (ex-Membase) 2.0 版

开发语言: Erlang 和 C

主要特性: 兼容 Memcache,但数据是持久化的,并且支持集群

许可证: Apache

数据传输格式: 缓存和扩展(memcached + extensions)

  • 通过 key 访问数据非常快(20万以上IOPS)
  • 数据保存在磁盘(不像 Memcache 保存在内存中 —— 译者注)
  • 在主主互备中,所有节点数据是一致的
  • 提供类似 Memcache 将数据保存在内存的功能
  • 支持重复数据删除功能
  • 友好的集群管理 Web 界面
  • 支持池和多丛结构的代理(利用 Moxi 项目)
  • 支持 Map/reduce 模式
  • 支持跨数据中心备份

应用场景:

  • 适用于低延迟数据访问系统,高并发和高可用系统。

使用案例:

低延迟可用于广告定投;高并发可用于在线游戏(如星佳公司)。

VoltDB 2.8.4.1版

开发语言: Java

主要特性: 快速的事务处理和数据变更

许可证: GPL 3

数据传输格式: 专有方式

  • 运行在内存的关系型数据库
  • 可以将数据导入到 Hadoop
  • 支持 ANSI SQL
  • 在 JAVA 环境中保存操作过程
  • 支持跨数据中心备份

应用场景:

  • 适用于在大量传入数据中保证快速反应能力的场合。

使用案例:

销售点数据分析系统;工厂控制系统。

Scalaris 0.5版

开发语言: Erlang

主要特性: 分布式 P2P 键值存储

许可证: Apache

数据传输和存储的方式: 自有方式和 基于JSON的远程过程调用协议

  • 数据保存在内存中(使用 Tokyo Cabinet 作为后台时,数据可以持久化到磁盘中)
  • 使用 YAWS 作为 Web 服务器
  • Has transactions (an adapted Paxos commit)
  • 支持事务处理(基于 Paxos 提交)(Paxos 是一种基于消息传递模型的一致性算法 —— 译者注)
  • 支持分布式数据的一致性写操作
  • 根据 CAP 定理,数据一致性要求高于数据可用性(前提是在一个比较大的网络分区环境下工作)(CAP 定理:数据一致性consistency、数据可用性availability、分隔容忍partition tolerance是分布式计算系统的三个属性,一个分布式计算系统不可能同时满足全部三项)

应用场景:

  • 如果你喜欢 Erlang 并且想要使用 Mnesia 或 DETS 或 ETS,但你需要一个能使用多种语言(并且可扩展性强于 ETS 和 DETS)的技术,那就选它吧。

使用案例:

使用基于 Erlang 的系统,但是想通过 Python、Ruby 或 JAVA 访问数据库

Kyoto Tycoon 0.9.56版

开发语言: C++

主要特性: 轻量级网络数据库管理系统

许可证: GPL

数据传输和存储的方式: HTTP (TSV-RPC or REST)

  • 基于 Kyoto Cabinet, 是 Tokyo Cabinet 的成功案例
  • 支持多种存储后端:Hash,树、目录等等(所有概念都是从 Kyoto Cabinet 那里来的)
  • Kyoto Cabinet 可以达到每秒100万次插入/查询操作(但是 Tycoon 由于瓶颈问题,性能比 Cabinet 要差点)
  • 服务器端支持 Lua 脚本语言
  • 支持 C、JAVA、Python、Ruby、Perl、Lua 等语言
  • 使用访问者模式开发(visitor patten:让开发者能在不修改类层次结构的前提下,定义该类层次结构的操作 —— 不明白就算了,译者也不明白)
  • 支持热备、异步备份
  • 支持内存数据库在后端执行快照
  • 自动过期处理(可用来布署一个缓存服务器)

应用场景:

  • 当你想要一个很精准的后端存储算法引擎,并且速度是刚需的时候,玩玩 Kyoto Tycoon 吧。

使用案例:

缓存服务器;股价查询系统;数据分析系统;实时数据控制系统;实时交互系统;memcached的替代品。

当然,上述系统的特点肯定不止列出来这么点。我只是列出了我认为很关键的信息。另外科技发展迅猛,技术改变得非常快。

附:现在下定论比较孰优孰劣还为时过早。上述数据库的版本号以及特性我会一个一个慢慢更新。相信我,这些数据库的特性不会变得很快。

via: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

译者:bazz2 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出