首先,你的表肯定是做了外键等约束的,所以删除,要从最外层删除。假设你的数据库是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结合使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)