ventricular septal defect_three identical strangers

ventricular septal defect_three identical strangers转一个BLOG,是美国一同行写的关于eXtremeDB的,但作者似乎是个中国人。这是BLOG原文地址:http://www.weiqigao.com/blog/2006/04/25/extremedb_exposed.html…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

转一个BLOG,是美国一同行写的关于eXtremeDB的,但作者似乎是个中国人。这是BLOG原文地址:http://www.weiqigao.com/blog/2006/04/25/extremedb_exposed.html

 

eXtremeDB eXposed

Clever title, isn’t it? Jonathan thinks so.

OK. Today’s OCI C++ lunch features Rob Martin talking about McObject‘s eXtremeDB embedded database product.

First person is Rob now.

We evaluated this product because a key customer wanted to use a embedded database as the foundation for their next generation products. eXtremeDB won the evaluation.

It is a memory resident database; can be put in the process space, or in shared memory. If you put it in heap, there is a feature that allows you to persist the data.

Performance of this thing is extremely good. Transactions incur low overhead.

It is a commercial product.

We found it to be fairly reliable. We did hit some problems. But they are all resolved by either us understanding the product better, or by McObject acknowledges them as bugs and subsequently fixed.

Small foot print, not heavy weight.

Times Ten, a competitor of eXtremeDB was bought by Oracle.

They have a DDL and a schema compiler. It supports structs, including nested structs. But a structure needs to be inside a class for instantiation.

Ways to identify objects in the database: oid (database wide), autoid (system generated serial number), ref (embedded reference to an entity’s oid.)

Standard CRUD. Finders. Lookup by hash. Lookup by tree index (unique as well as non-unique.)

Transactions are simple: read, write, commit, rollback. Transactions are database scoped. You can change it through build time switches, but for our usage scenarios, database wide locking turns out to be optimal.

Kevin, our resident eXtremeDB expert, chimed in: “you have to understand how fast their transactions is. They are in microseconds.”

There is also a limit on the number of entities that you can touch within a transaction.

Supports persistence which is essentially transactions logging. It depends on the OS file system. On recovery, one “sync”s the disk image with the memory image.

eXtremeDB claims to have object semantics. But the content is rich structure types. The primary interface is structured procedure calls. There is a thin object wrapper that is generated from the DDL. It feels more relational to me than object based.

The company (McObject) is in Seattle with a group in Washington, DC. They do their thing through memory management and aggressive locking strategies tailored to the app. They avoid heap allocation of memory in the engine.

We felt very comfortable with this database. We didn’t do much C++ structures in our code and uses eXtremeDB extensively.

Their support staff is very responsive. The turn around time is usually within 24 hours. All of our support requests have been resolved. We did find out one bug regarding a clever bit of threading code (transaction without mutex) that only manifests itself on dual CPU machines running Windows and that one took two or three rounds.

OCI and McObject are partners of each other now.

Their DDL supports: signed, unsigned char (64K limit) enum, struct (only fixed size structs can be oids), autoid_t, blog, data, ref, string, time, vector.

And here’s an example:

declare database eeDemo;
declare oid personId[1024];

compact class Location {
  string streetAddress;
  string city;
  string state;
  string zipcode;
  autoid[4096];

  tree byZipCode;
};

compact class Person {
  oid;
  autoid_t home;
  autoid_t work;
  autoid_t temp;
};

We added MPC support for compiling the eXtremeDB schema. We don’t run it by hand.

The generated code are C and C++ header and implementation files. The generated C code will have functions for Person_home_get() and Person_home_put(). The generated C++ code will have a Person class that has home_get() and home_put() methods.

Search methods and comparison methods are generated. Cursor manipulation code for using any tree index is also generated. A checkpoint() method is generated to update hash indexes after entity manipulation.

The client code looks like this:

mco_error_set_handler(onError);
start();
uint4 dbSize = (1 * 1024 * 1024);
uint2 pageSize = 4096;
void * heap = malloc(dbSize);
mco_db_open("eeDemo");
mco_db_h dbHandle;
connect(dbName, &dbHandle);
mco_trans_h txn;
startWriteTxn(&dbHandle, &txn);
rollback(&txn);
startReadTxn(&dbHandle, &txn);

{
  mco_trans_h txn2;
  startReadTxn(&dbHandle, &txn2);
  commit(&txn2);
}

disconnect(&dbHandle);
closeDB("eeDemo");
stop();

We wrote a set of wrappers that made using eXtremeDB very handy, including a DB registry, Transaction, TransGuard, ReadTransGuard, WriteTransGuard, WriteTransGuardProxy. The various trans guards uses the C++ guard concept to make database code dead easy.

The eXtremeDB product has some features, such as SQL and events, that we did not use.

Rob is done. First person is Weiqi now.

Until next time.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16196379/viewspace-606989/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16196379/viewspace-606989/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182192.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 跨域访问被拒绝怎么办_request获取请求的域名

    跨域访问被拒绝怎么办_request获取请求的域名项目需要,要写个本地服务,给VUE前端提供api。联调发现,必须要支持跨域访问才行,调了好久,终于能正常访问了,特意记录一下。HttpListenerRequestrequest=context.Request;context.Response.Headers.Add(“Content-type”,”text/html;charset=UTF-8″);context.Response.ContentEncoding=Encod

    2022年9月27日
    4
  • matlab randint函数

    matlab randint函数randint n m 产生的是一个 n m 维的矩阵 矩阵的元素或者是 0 或者是 1 是随机的 如果想产生一个范围的数 可以设置一个区间 如 randint 2 3 16 就是产生一个 2 3 随机矩阵 这个矩阵的元素是区间 16 的随机数 randint 3 3 ans nbsp nbsp nbsp nbsp 1 nbsp nbsp nbsp nbsp 1 nbsp nbsp nbsp nbsp 0 nbsp nbsp nbsp nbsp 1 nbsp nbsp nbsp nbsp 1 nbsp nbsp nbsp nbsp 0 nbsp nbsp nbsp nbsp 0 nbsp nbsp nbsp

    2025年11月4日
    0
  • APP运营:盘点八款主流 APP 消息推送工具[通俗易懂]

    APP运营:盘点八款主流 APP 消息推送工具[通俗易懂]在APP日常运营中,基于营销以及推广的目的,我们需要对APP用户推送一些活动信息或重要资讯。常见的消息推送工具分为两种:1、即技术团队自行开发;2、第三方Push工具对于许多创业型公司而言,相对于自行开发,第三方消息推送工具在推送稳定性、精确覆盖性以及成本方面更具有优势,只需要下载并集成SDK就可以实现功能。本文中我们将盘点八款主流第三方APP消息推送工具,希望对大家在A…

    2022年5月8日
    204
  • 米的换算单位和公式_米的单位换算公式大全(长度单位大全表)

    米的换算单位和公式_米的单位换算公式大全(长度单位大全表)位换算题是小学低年级数学学习重点之一。单位换算记忆不够深刻,孩子经常混淆运用,容易出现计算失误,进率错误等问题。牢记单位换算口诀,才能准确计算。口诀:大化小,往右移,进率有几个“0”,就移几位。小化大,往左移,进率有几个“0”,就移几位。长度单位国际单位是“米”。最常见的有千米(km)、米(m)、分米(dm)、厘米(cm)、毫米(mm)。换算公式1千米(km)=1000米(m),1米(m)=10分…

    2022年7月11日
    35
  • memcached出现:Fatal error: Call to undefined method Memcached::connect()

    memcached出现:Fatal error: Call to undefined method Memcached::connect()

    2022年2月8日
    45
  • 通过QXDM锁BAND_不root怎么锁band

    通过QXDM锁BAND_不root怎么锁band1、通过QXDM锁频QXDM工具View->New->Common->NVBrowser:NV(NonVoliatile)参数就是保存在终端上的非易失参数,可以通过view中的NVBrowser来进行查看和修改。这些信息由厂家固化在终端内部,一般不允许用户修改。同时,可以通过NVBrowser对终端进行Offline(掉电重启)操作。其中06828LTEBCconfig可以配置终端支持的band信息,将该项的值读出来(默认读出来为十进制)转化为二进制,..

    2022年9月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号