mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

Inside Tokyo Cabinet その参


mikioTC

QDBM?


QDBMTCDBM使TC


 : 

 : 

 : 

64 : 642GB8EB

 : 

 : 

C99 : 


QDBM90%642GB8EB82639,223,372,036,854,775,808641使8EB48GB10

使QDBM1.5

MacIntel CPUSPARCPA-RISC

C99PerlJavaC89int64_tlong long使C99Windows

QDBMLGPLGNU Lesser General Public License使/TCTC


TC28/16/32/640256/064K/04G/09E012711281638321638420971513209715226843545641281使

使使


 :  : 28

2 :  : 12568

 : DB326464

 : 06553616

 : 

 : 




16memcpywriteNFS

TC
#define TCSWAB32(TC_num) \
  ( \
   ( (TC_num & 0x000000ffUL) <<24) | \
   ( (TC_num & 0x0000ff00UL) <<8) | \
   ( (TC_num & 0x00ff0000UL) >>8) | \
   ( (TC_num & 0xff000000UL) >>24) \
  )
#if defined(_MYBIGEND) || defined(_MYSWAB)
#define TCHTOIL(TC_num)   TCSWAB32(TC_num)
#else
#define TCHTOIL(TC_num)   (TC_num)
#endif

 configure 鹿htonlntohl使


44044使

調1616816165536

324648324GB6432128GB3216GBOS32_LARGEFILE64_SOURCE2GB

409664323006432/4096 = 12336 102336300409623362636

調TCCOS便
$ tcucodec conf

API


APIQDBM使QDBM
DEPOT *dpopen(const char *name, int omode, int bnum);
int dpclose(DEPOT *depot);

NULL使putgetopenFILEC++JavaPerlRubyif

GDBMstderrmutexerrno#define dpecode (*dpecodeptr())dpecodeptrTSDThread Specific Data

TCopenclose
TCHDB *tchdbnew(void);
bool tchdbopen(TCHDB *hdb, const char *path, int omode);
bool tchdbclose(TCHDB *hdb);
void tchdbdel(TCHDB *hdb);

newdelopencloseecode

get
char *dpget(DEPOT *depot, const char *kbuf, int ksiz,
  int start, int max, int *sp);

ksizstrlen(kbuf)-1getputout

startmaxdpget(depot, "hoge", 4, 8, 3, &size)hoge8110-1便使mmap

put
int dpput(DEPOT *depot, const char *kbuf, int ksiz,
  const char *vbuf, int vsiz, int dmode);

dmodeDP_DOVERDP_DKEEPDP_DCATtype safeTRUE80%DP_DOVER使DP_DOVERputDP_DKEEPputkeepDP_DCATputcat

putgetTC
bool tchdbput(TCHDB *hdb, const char *kbuf, int ksiz,
  const char *vbuf, int vsiz);
bool tchdbput2(TCHDB *hdb, const char *kstr, const char *vstr);
bool tchdbputkeep(TCHDB *hdb, const char *kbuf, int ksiz,
  const char *vbuf, int vsiz);
bool tchdbputkeep2(TCHDB *hdb, const char *kstr, const char *vstr);
bool tchdbputcat(TCHDB *hdb, const char *kbuf, int ksiz,
  const char *vbuf, int vsiz);
bool tchdbputcat2(TCHDB *hdb, const char *kstr, const char *vstr);
char *tchdbget(TCHDB *hdb, const char *kbuf, int ksiz, int *sp);
char *tchdbget2(TCHDB *hdb, const char *kstr);


put2get22sstrsyntax sugarUNIXdup2wait3


TCQDBM64

API使使使UNIX使