Berkeley DB 以及 DB_SECONDARY_BAD: Secondary index inconsistent with primary 问题

HyperMesh 2025新功能尝鲜:用Volume Tetramesh一键生成工业级四面体网格 HyperMesh 2025推出的Volume Tetramesh功能,通过“体到体”的全新范式,实现了工业级四面体网格的一键生成。该功能利用Proximity与Curvature参数智能识别并加密几何特征,将工程师从繁琐的几何清理和表面网格划分中解放出来,在保证网格质量的同时,显著提升了前处理效率,尤其适用于发动机缸体等复杂模型的仿真分析。 阅读详情

项目需要,最近开始学习Berkeley DB,先列举一些我能理解的Berkeley DB的优点。

一 优点

  Berkeley DB提供快速,可靠,和事务保护的记录存储。

  Berkeley DB是嵌入式数据库,可以和你的应用方便的运行在同一地址空间,这对高效率的程序来说很有用。

  Berkeley DB可以指定每个表的存储方式,这使得你可以根据这张表的应用环境更加的优化程序。(“表”被称为“数据库”,“数据库”被称为环境)

二   缺点

  只有漂亮的代码,但没有完美的代码。

  交互操作比较简单:

        这使得在Berkeleydb上的复杂查询变得困难,对程序员来说也是一个挑战。

  定位:

        berkeleydb更应该说是一种面向程序员的数据库,面对复杂的应用时,会增加程序员大量的工作。

  再列举一些典型应用

三 典型应用

  任务队列:

        为什么这里提到任务队列呢?在服务器程序开发中,对程序的可靠性要求是很高的,当你的程序断电重启时,我们不希望任务信息被丢掉,而是希望重新开始执行。因此可以将你的任务放在db中。有的程序员可能会考虑到性能上的损失,但是berkeleydb的缓存机制已经相当漂亮,在你选择了正确的存储方式和适当配置了berkeleydb时,相信性能不是问题。在berkeleydb的api中,也可以发现便于提供任务队列的接口,如等待一个特定的记录等。

四 DB_SECONDARY_BAD: Secondary index inconsistent with primary 问题

  我的berkeleydb用到了从属数据库,因此我写了回调函数,关联了主数据库和从属数据库。

  但是在调用dbp->put(dbp,NULL,&key, &data, DB_NOOVERWRITE); 的时候,出现了DB_SECONDARY_BAD: Secondary index inconsistent with primary 的错误。为什么会出现不一致呢?我首先怀疑回调函数是否执行正常,但函数体内的代码并没有什么问题,最容易出错的skey->size = strlen(XXX) + 1也是正常的,但多次重复回调之后,发现出现了一个主数据库中原有的值,这是因为我在建从属数据库的时候,主数据库早已存在并且有数据,由于处理不当,造成了主从不一致的情况。删掉主数据库重建,则问题解决了。

UWB芯片DW3000之PDOA测向实现源码 本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。 阅读详情

相关推荐

teradata sql命令语句

详细描述teradata数据库基本sql语句,体现它作为数据仓库的优势

Berkeley DB程序员参考--目录

Table of Contents  Preface .................................................................................................... xi 序言 Conventions Used in this Book .......................

A Beautiful Draeam, A Beautiful Future 1007

3dmax插件神器-017-相机构图辅助.mse

3dmax插件神器-017-相机构图辅助.mse

Berkeley DB教程之五:直接持久层应用

目录: 主索引(Primary Indexes)的应用 第二索引(Secondary Indexes)的应用    详见:http://www.micmiu.com/nosql/berkeley/berkeley-dpl/         ----

Michael 122

[转]Berkeley DB 概述

Berkeley DB 概述 皮东Berkeley DB官方网站:http://www.sleepycat.com/ Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库(database library),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。Berkeley DB为数据的存取和管理提供了一组简洁的函...

威尔软件 438

BDB 入门篇 第1章 Berkeley DB Java Edition简介

目录 1. Introduction to Berkeley DB Java Edition 1.1 Features(特点) 1.1.1 DPL Features (DPL 特点) 1.1.2 Base API Features (底层API特点) 1.1.3 Which API Should You Use? (你应该使用那种API?) 1.2 The JE...

极客星云-CSDN博客 4366

berkeley dbsecondaryDatabase的用法 and 构建索引

简单介绍下bdb中索引的构建。        为什么要构建索引?        由于bdb是key/value型数据库,我们通常是通过key值来检索数据。可是,实际运用中,我们更希望能够通过value中的某些值来得到这样一整条记录。显然仅仅靠key来检索是不可行的。原文摘抄如下:Usually you find database records by means of the record's

Simple life 3325

BerkeleyDB使用的一些心得

很久之前的笔记了,以下适合BDB新手,因为项目赶得比较紧,所以没有深入研究,很多地方不是根本的解决办法。 1.如果要对BDB进行封装的话,推荐参考下myicq源码中的实现方式。 2.在使用BDB的时候,如果用了set_flag等函数改变了数据库的标志,重新运行的时候切记要把原来的表删除。否则会报invalid argument错误。 3.报secondary index i

潜行 1772

BerkeleyDB的Java版本的使用

BerkeleyDB在爬虫、搜索领域里头用的比较多,整体来讲的特点是嵌入式、kv数据库,功能强大,能支持几百T的存储。本文主要讲述怎么在java里头使用它。 添加依赖 <!-- Berkeley DB Java Edition --> <dependency> <...

weixin_33806914的博客 369

BerkeleyDB 多索引查询

由于性能原因,我们打算将关系型数据库转移到内存数据库中;在内存数据库产品的选型中,我们确定的候选对象有Redis和Berkeley DB; Redis查询效率不错,并且支持丰富的数据存储结构,但不支持多索引,这样对于比较复杂的sql移植可能会造成数据膨胀;Berkeley DB只支持简单的Key/Value, 但支持多索引查询,对我们目前的应用来说,移植起来更有优势;   下面我们看看,如何...

weixin_34186128的博客 283

Berkeley DB嵌入数据库技术特性

像MySQL这类基于C/S结构的关系型数据库系统虽然代表着目前数据库应用的主流,但却并不能满足所有应用场合的需要。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。这样不仅可以避免安装庞大的数据库服务器,而且还可以简化数据库应用程序的设计。Berkeley DB正是基于这样的思想提出来的。  Berkeley DB简介   Berkeley DB是一个开放源代码的内嵌式数据库管理系统,

lyc96532的专栏 2970

[转]Berkeley DB介绍及主从复制机制

Berkeley DB(BDB)是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对 (Key/Value Pair),而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据。

heiyeluren的blog(黑夜路人的开源世界) 6809

操作代码

创建临时表 create volatile multiset table TEMP_TMC AS( 建表语句 ) with data primary index(Etl_Tx_Dt) on commit preserve rows;

Speedy 444

Berkeley DB(六) -- DB Replication (HA)上部

Berkeley DB -- DB Replication (HA)上部Introductionbdb包括对构建基于复制(replication)的高可用性应用程序的支持。bdb replication组由一些独立配置的数据库环境组成。组里只有一个master数据库环境和一个或多个client环境。Master环境支持读和写,client环境支持只读。如果master环境倒掉了,应用程序将可能提升...

weixin_33807284的博客 250

SQL-Teradata基础

1.创建一个和表 pnr_1 结构一样的表 Create table pnr_2 as pnr_1 with no data 不含数据 Create table pnr_2 as pnr_1 with data 含数据 2.NULLIF(exp1,exp2) 当字段exp1与exp2相等时返回 空;当两者不相等时返回 exp1 -------常用在除数不能为0的限制下 RP...

weixin_30251829的博客 862

一个简单关于Berkeley DB的读写问题

import java.io.*; import com.sleepycat.je.*; import com.sleepycat.bind.tuple.*; public class BD { /** * @param args */ public void writer() { try { // 配置环境 Environme...

weixin_30642305的博客 204

主键重复和唯一索引冲突_深入了解数据库索引

对于开发人员来说,与关系型数据库打交道至少使用或知道数据库索引(index)。它其实是以空间换时间的方式,对已经存在的数据表建立索引,从而使得每次通过索引的检索时间更短。如果没有索引,一个带有where子句的查询会扫描所有元祖并返回与查询匹配的的值,显然这是效率非常低的方法,特别是数据表的上万甚至上百万条记录时。File OrganizationFile Organization讲的是数据库文件记...

weixin_42514002的博客 1090

MySQL InnoDb中的 Clustered IndexSecondary Index

MySQL InnoDb中的 Clustered IndexSecondary Index MySQL InnoDb中的索引分为Clustered Index (聚簇索引)和 Secondary Index(二级索引) Clustered Index: 每一个InnoDB表都有一个特殊的索引,叫做clustered index,通常来讲,clustered index和prim

匿_名_用_户的专栏 7877

TERADATA的主键与索引

  在传统的关系型数据库中,像Oracle、SQL Sever、DB2等,建表时一定要设定明确的主键约束,以唯一地区分记录。   TERADATA虽也是关系型数据库,但因专为数据仓库而生,仓库汇集多方数据,数据质量很难保证,故对主键的概念和限制也大大地淡化了,取而代之的是索引。具体体现在:     1) 有主键概念,存在于仓库E-R图中。清晰的主键和外键,便于理解和关联查找;     2...

Lianming2009的专栏 2421

Teradata 中表的分类及其各类型表应该注意的问题总结

Teradata 中表的分类及其各类型表应该注意的问题总结 SQL:select * from (       select               deptno              ,sum(sal)        from emp        group by deptno        )上面sql 在oracle 能执行,但是在Ter

范晓亮的Teradata专栏 7730
上一篇: Notes on Programming in C
下一篇: 绑定端口与INADDR_ANY
sprwig
博客等级 码龄18年 4粉丝 13原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值