A. elasticsearch本身是数据库么
使用Elasticsearch存储的文档数量接近50亿(算上1份复制,接近 100亿文档),总共10个数据节点和2个元数据节点(48GB内存,8核心CPU,ES使用内存达到70%),每天的文档增量大概是3000W条(速度 持续增加中)。
B. ES与传统数据库的比较
1.结构名称不同
2.ES分布式搜索,传统数据库遍历式搜索
3.ES采用倒排索引,传统数据库采用B+树索引
4.ES没有用户验证和权限控制
5.ES没有事务的概念,不支持回滚,误删不能恢复
6.ES免费,完全开源;传统数据库部分免费
有关更详细的比较内容,可以到黑马程序员官网找到社区技术文章,找不到可以对话框问一下。里面还有结合工作的举例。
C. ES是什么
指音的指码母颜文色字,s英色代型指彩色与网字指写e色号指还号的母.字种拼也品产一络.也.也.密情发
D. Redis简介以及和其他缓存数数据库的区别
Redis 是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
它支持多种类型的数据结构,如字符串(Strings),散列(Hashes),列表(Lists),集合(Sets),有序集合(Sorted Sets或者是ZSet) 与范围查询, Bitmaps,Hyperloglogs 和 地理空间(Geospatial)索引半径查询。 其中常见的数据结构类型有String、List、Set、Hash、ZSet这5种。
E. redis是缓存系统还是数据库
相对于熟读官方文档,更重要的是要把框架环境搭起来。 零、环境介绍 操作系统:centOS 数据库: mysql 5/installer php mv composer.phar /usr/local/bin/composer 安装完成,使用以下命令看是否安装成功 composer -V 出现版本号,即说明安装成功 三、安装Laravel 按照Laravel的官方文档说明即可,建议使用【通过Laravel安装工具】,没什么坑,这里略过 提示:由于Laravel还依赖于一些的PHP扩展,所以使用yum安装 sudo install yum php-mysql php-mcrypt php-mbstring php-tokenizer php-openssl 安装完成后,在Nginx的配置文件(一般是/etc/nginx/conf.d/default.conf)最下方添加如下配置 location / { try_files $uri $uri/ /index.php?$query_string; } 来到你的laravel工程目录下,看到storage和vendor文件夹,使用以下命令修改其文件读写权限,让Nginx用户能读写它 sudo chmod -R 766 storage sudo chmod -R 766 vendor 四、让MVC跑起来! 在此之前,你应该读一下官方文档 路由、控制器、数据库使用基础、Eloquent ORM 至此,可以开始coding,开发一个 MVC的demo了,此demo的功能是将数据库表tbl_item从数据库里读出来,并以json格式响应给浏览器。 假设你已经通过laravel new demo来初始化你的web app。 数据库里建库(demo)、建表(tbl_item),(字段随意定) 配置配置文件 config/database.php 直接操作数据库,往tbl_item里插入一条数据 开始coding demo/app/http/routes.php底部添加如下代码: Route::get('/item/{id}', 'ItemController@showItem'); demo/app/http/controllers/ 目录新添文件 ItemController.php,代码如下: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Item as Item; class ItemController extends Controller { private $model; public function __construct() { $this->model = new Item(); } public function showItem($id) { $users = $this->model->fetchAll(); echo json_encode($users); Log::info('获取用户列表,通过msyql'); } } demo/app/目录下新增文件 Item.php 代码如下 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Item extends Model { protected $fillable = ['name', 'price']; protected $guarded = ['id']; /** * The database table used by the model. * default: tbl_items * @var string */ // protected $table = 'tbl_items'; public function fetchAll(){ $items = $this->all()->toJson(); return $items; } } 使用浏览器访问yourIp/item/1,即可列出所有的item数据 五、Laravel结合Redis 直连DB是不够的,很快数据库访问就会成为系统的瓶颈。我们引入缓存Redis。还是一样的思路,先让系统跑起来。 1、安装启动Redis 安装 $ wget download.redis.io/releases/redis-3.0.1.tar.gz $ tar xzf redis-3.0.1.tar.gz $ cd redis-3.0.1 $ make 启动 $ src/redis-server 查看官方下载和安装文档,只需要几个命令即可 2、安装PHP PRedis PRedis是PHP访问redis的扩展包,只需要下载原码即可,不需要安装PHP扩展(如php-redis.so)。但在这之前要介绍一个composer,因为laravel通过它来安装第三方程序包(管理依赖关系)。 cd 到你的App所在路径,修改composer.json,在require字段里,添加"predis/predis":"~1.0.1",然后当前目录下 sudo composer update,此时就会自动下载包需要的扩展包,这些扩展包将会被放在vendor目录下。如果出现内存不够这些报错,现在看来是内存分配不够的原因,重启一下服务器即可,彻底解决的办法要修改服务器配置,但我不清楚改哪里,后续再补 配置相关配置,查看官方文档即可。主要是配置config/database.php 'redis' => array( 'cluster' => false, 'default' => array('host' => '127.0.0.1', 'port' => 6379) ) 3、coding <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User as User; use Illuminate\Support\Facades\Redis as Redis; class UserController extends Controller { // use User; private $model; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->model = new User(); } /** * Show * * @return Response */ public function showUser($id) { $redis = Redis::connection('default'); $cacheUsers = $redis->get('userList'); if( $cacheUsers ){ $users = $cacheUsers; print_r($users); Log::info('获取用户列表,通过redis'); }else{ $users = $this->model->fetchAll(); $redis->set('userList', $users); print_r($users); Log::info('获取用户列表,通过msyql'); } } }
F. elasticsearch可以替代数据库吗
不推荐代替数据库哦~
ES团队不推荐完全采用ES作为主要存储,缺乏访问控制还有一些数据丢失和污染的问题
建议还是采用专门的 DB存储方案,然后用ES来做serving。
G. Redis 可以用来做数据库吗
1、用来存放诸如用户注册信息、产品信息等可以估算出体量的数据还是很好的
比如一个用户注册信息1k,一亿用户信息也才需要100G内存
2、数据结构足够使用
3、搜索当然不要用redis,可以用ES来实现,搜出id后直接在redis里命中对应的数据。
4、redis最大的问题是事务的支持不好,但可以解决
5、读性能与硬盘数据库比,高出的不只一个数量级,尤其数据越多随机读的优势越明显。 并且互联网应用一般都是读多写少
H. 可否完全使用ElasticSearch代替数据库存储
我们使用Elasticsearch存储的文档数量接近50亿(算上1份复制,接近
100亿文档),总共10个数据节点和2个元数据节点(48GB内存,8核心CPU,ES使用内存达到70%),每天的文档增量大概是3000W条(速度
持续增加中)。目前来看,单个文档的查询效率基本处于实时状态;对于1到2周的数据的聚合统计操作也可以在10秒之内返回结果。
但是,还有提升的空间:
1. 对于查询单条数据的应用场景来说,我们可以使用ES的路由机制,将同一索引内的具有相同特征(比如具有相同的userid)的文档全部存储于一个节点上,这样我们之后的查询都可以直接定位到这个节点上,而不用将查询广播道所有的节点上;
2. 随着数据节点的增加,适当增加分片数量,提升系统的分布水平,也可以通过分而治之的方式优化查询性能;
个人以为Elasticsearch作为内部存储来说还是不错的,效率也基本能够满足,在某些方面替代传统DB也是可以的,前提是你的业务不对操作的事
性务有特殊要求;而权限管理也不用那么细,因为ES的权限这块还不完善。由于我们对ES的应用场景仅仅是在于对某段时间内的数据聚合操作,没有大量的单文
档请求(比如通过userid来找到一个用户的文档,类似于NoSQL的应用场景),所以能否替代NoSQL还需要各位自己的测试。如果让我选择的话,我
会尝试使用ES来替代传统的NoSQL,因为它的横向扩展机制太方便了。
I. 为什么说缓存相当于一个数据库
临时存储的地方,其实说白了,一个txt文本也能相当一个数据库。
什么是数据库,就是可以存储信息的地方。
当然它不一定具有
增删改查的内置方法
但是你不能不承认。它存了东西,就可以被定义成数据库
所以,缓存相当数据库
可以理解。