数据库中es索引技术是怎么回事,哪位大神能否详细给说问一下

数据库中es索引技术是怎么回事,哪位大神能否详细给说问一下,第1张

首先,你的表肯定是做了外键等约束的,所以删除,要从最外层删除。假设你的数据库是Sql Server的。

1、技能表

delete from 技能表 where 人物id in (select 人物id from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3))

2、装备属性表

delete from 装备属性表 where 装备id in (select 装备id from 装备表 where 人物id in (select 人物id from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3)))

3、装备表

delete from 装备表 where 人物id in (select 人物id from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3))

4、人物表

delete from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3)

5、账号表

delete from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3

1结构名称不同

2ES分布式搜索,传统数据库遍历式搜索

3ES采用倒排索引,传统数据库采用B+树索引

4ES没有用户验证和权限控制

5ES没有事务的概念,不支持回滚,误删不能恢复

6ES免费,完全开源;传统数据库部分免费

有关更详细的比较内容,可以到黑马程序员官网找到社区技术文章,找不到可以对话框问一下。里面还有结合工作的举例。

Elasticsearch和MySQL可以结合使用,主要是因为它们两个的定位和功能不同。MySQL是一种关系型数据库,用于存储和管理结构化数据,而Elasticsearch则是一种搜索引擎和分析引擎,用于实时分析和搜索大量非结构化数据。

将Elasticsearch和MySQL结合使用可以实现更好的搜索和分析功能。比如,可以将MySQL中的结构化数据导入到Elasticsearch中建立索引,从而实现更快速、更准确的搜索和分析。同时,Elasticsearch也可以将搜索结果与MySQL中的结构化数据进行关联,从而提供更丰富的搜索结果和分析报告。

此外,Elasticsearch还可以作为MySQL的缓存层,用于加速访问和查询速度。将经常查询的数据存储在Elasticsearch中,可以大大减少MySQL的查询负载,提高系统性能和响应速度。

总之,结合使用Elasticsearch和MySQL可以充分发挥它们各自的优势,实现更好的搜索和分析功能,同时提高系统性能和响应速度。

可以

在es 中, 可以在没有索引,没有类型的情况下直接插入文档,插入后会自动创建索引和类型,es是一个分布式的文档数据库,索引的文档都是以json序列化形式存贮的,而不是像关系型数据库那样是列数据行的形式存贮的。

在es 70之前,常把es和关系型数据库的名词做如下映射

,代码主要逻辑如下:

// 读取要导入数据的文件

BufferedReader br = new BufferedReader(new FileReader(

"D:\\test\\testtxt"));

String json = null;

int count = 0;

// 开启批量插入

BulkRequestBuilder bulkRequest = clientprepareBulk();

while ((json = brreadLine()) != null) {

bulkRequestadd(clientprepareIndex("test", "all")

setSource(json));

// 每一千条提交一次

if (count % 1000 == 0) {

bulkRequestexecute()actionGet();

Systemoutprintln("提交了:" + count);

}

count++;

}

bulkRequestexecute()actionGet();

Systemoutprintln("插入完毕");

brclose();

登录后复制

运行后发现一个问题,我100多万条的数据,导入到es中怎么生成了1000多万条,而且还是在没有完全导入的情况下

然后用小批量数据导入到es,再把这些数据导出来,发现有好多重复的数据

为什么会重复呢,原因是在每一千条提交一次代码这块,第一次一千条提交了,并没有把bulkRequest置空,所以第二次提交的时候,会提交两千条,包括第一次已经提交的一千条,然后我们自己也没有设置_id,所以es会自动给数据生成一个_id,即使是重复的数据,搞清楚了原因,下面来说解决方法,主要有两种:

第一种就是在提交了一千条后,对bulkRequest进行重置,因为bulkRequest并没有重置的方法,所以可以新建一个bulkRequest,类似于重置,具体代码如下:

// 读取要导入数据的文件

BufferedReader br = new BufferedReader(new FileReader(

"D:\\test\\testtxt"));

String json = null;

int count = 0;

// 开启批量插入

BulkRequestBuilder bulkRequest = clientprepareBulk();

while ((json = brreadLine()) != null) {

bulkRequestadd(clientprepareIndex("test", "all")

setSource(json));

// 每一千条提交一次

if (count % 1000 == 0) {

bulkRequestexecute()actionGet();

//此处新建一个bulkRequest,类似于重置效果

bulkRequest = clientprepareBulk();

Systemoutprintln("提交了:" + count);

}

count++;

}

bulkRequestexecute()actionGet();

Systemoutprintln("插入完毕");

brclose();

登录后复制

第二种就是自己设置_id,确保每一条数据只有一个_id,这样的话,即使数据重复了,因为_id是一样的,所以es会进行更新,这样的话并没有从根源上解决数据重复的问题,只是重复数据会更新,这样的话效率会慢,具体代码如下:

// 读取要导入数据的文件

BufferedReader br = new BufferedReader(new FileReader(

"D:\\test\\testtxt"));

String json = null;

int count = 0;

// 开启批量插入

BulkRequestBuilder bulkRequest = clientprepareBulk();

while ((json = brreadLine()) != null) {

//设置_id为count

bulkRequestadd(clientprepareIndex("test", "all",

StringvalueOf(count))setSource(json));

// 每一千条提交一次

if (count % 1000 == 0) {

bulkRequestexecute()actionGet();

//此处新建一个bulkRequest,类似于重置效果

Systemoutprintln("提交了:" + count);

}

count++;

}

bulkRequestexecute()actionGet();

Systemoutprintln("插入完毕");

brclose();

登录后复制

建议使用第一种方法,效率会快很多。

以上就是关于数据库中es索引技术是怎么回事,哪位大神能否详细给说问一下全部的内容,包括:数据库中es索引技术是怎么回事,哪位大神能否详细给说问一下、ES与传统数据库的比较、es和mysql结合使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9395787.html

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

发表评论

登录后才能评论

评论列表(0条)

保存