⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>database.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center>
<hr><h1>database.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; DATABASE.H &gt;----------------------------------------------------*--------*</span>
00002 <span class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</span>
00003 <span class="comment">// (Main Memory Database Management System)                          *   /\|  *</span>
00004 <span class="comment">//                                                                   *  /  \  *</span>
00005 <span class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</span>
00006 <span class="comment">//                          Last update: 23-Dec-98    K.A. Knizhnik  * GARRET *</span>
00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>
00008 <span class="comment">// Database management</span>
00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>
00010 
00011 <span class="preprocessor">#ifndef __DATABASE_H__</span>
00012 <span class="preprocessor"></span><span class="preprocessor">#define __DATABASE_H__</span>
00013 <span class="preprocessor"></span>
00014 <span class="preprocessor">#include "class.h"</span>
00015 <span class="preprocessor">#include "reference.h"</span>
00016 <span class="preprocessor">#include "file.h"</span>
00017 
00018 BEGIN_FASTDB_NAMESPACE
00019 
00023 <span class="preprocessor">#ifdef DISKLESS_CONFIGURATION</span>
00024 <span class="preprocessor"></span><span class="comment">// In diskless confiuration database can not be reallocated</span>
00025 <span class="keyword">const</span> size_t dbDefaultInitDatabaseSize = 32*1024*1024;
00026 <span class="preprocessor">#else</span>
00027 <span class="preprocessor"></span><span class="keyword">const</span> size_t dbDefaultInitDatabaseSize = 1024*1024;
00028 <span class="preprocessor">#endif</span>
00029 <span class="preprocessor"></span>
00033 <span class="keyword">const</span> size_t dbDefaultInitIndexSize = 512*1024;
00034 
00038 <span class="keyword">const</span> size_t dbDefaultExtensionQuantum = 4*1024*1024;
00039 
00043 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> dbMaxParallelSearchThreads = 64;
00044 
00045 <span class="keyword">const</span> <span class="keywordtype">int</span> dbDefaultParallelScanThreshold = 1000;
00046 <span class="keyword">const</span> <span class="keywordtype">int</span> dbDefaultPollInterval = 100*1000; <span class="comment">// milliseconds</span>
00047 <span class="keyword">const</span> <span class="keywordtype">int</span> dbOpenPollInterval = 1000; <span class="comment">// milliseconds</span>
00048 <span class="keyword">const</span> <span class="keywordtype">int</span> dbWaitReadyTimeout = 60*1000; <span class="comment">// milliseconds</span>
00049 <span class="keyword">const</span> <span class="keywordtype">int</span> dbWaitStatusTimeout = 60*1000; <span class="comment">// milliseconds </span>
00050 <span class="keyword">const</span> <span class="keywordtype">int</span> dbRecoveryConnectionAttempts = 3; 
00051 <span class="keyword">const</span> <span class="keywordtype">int</span> dbStartupConnectionAttempts = 60;
00052 <span class="keyword">const</span> <span class="keywordtype">int</span> dbReplicationWriteTimeout = 60*1000; <span class="comment">// milliseconds </span>
00053 <span class="keyword">const</span> <span class="keywordtype">int</span> dbMaxAsyncRecoveryIterations = 1000;   
00054 <span class="keyword">const</span> <span class="keywordtype">int</span> dbTableHashSize = 1009;   
00055 
00059 <span class="keyword">enum</span> dbInternalObject { 
00060     dbTableRow, 
00061     dbPageObjectMarker,
00062     dbTtreeMarker,
00063     dbTtreeNodeMarker,
00064     dbHashTableMarker,
00065     dbHashTableItemMarker,
00066     dbRtreeMarker,
00067     dbRtreePageMarker,
00068     
00069     dbInternalObjectMarker = 7 <span class="comment">// mask for internals object markers</span>
00070 };
00071     
00072 <span class="keyword">const</span> offs_t dbFreeHandleMarker = (offs_t)1 &lt;&lt; (<span class="keyword">sizeof</span>(offs_t)*8 - 1); 
00073 
00074 <span class="keyword">const</span> size_t dbAllocationQuantumBits = 4;
00075 <span class="keyword">const</span> size_t dbAllocationQuantum = 1 &lt;&lt; dbAllocationQuantumBits;
00076 <span class="keyword">const</span> size_t dbPageBits = 12;
00077 <span class="keyword">const</span> size_t dbPageSize = 1 &lt;&lt; dbPageBits;
00078 <span class="keyword">const</span> size_t dbIdsPerPage = dbPageSize / <span class="keyword">sizeof</span>(oid_t);
00079 <span class="keyword">const</span> size_t dbHandlesPerPage = dbPageSize / <span class="keyword">sizeof</span>(offs_t);
00080 <span class="keyword">const</span> size_t dbHandleBits = 1 + <span class="keyword">sizeof</span>(offs_t)/4; <span class="comment">// log(sizeof(offs_t))</span>
00081 <span class="keyword">const</span> size_t dbBitmapSegmentBits = dbPageBits + 3 + dbAllocationQuantumBits;
00082 <span class="keyword">const</span> size_t dbBitmapSegmentSize = 1 &lt;&lt; dbBitmapSegmentBits;
00083 <span class="keyword">const</span> size_t dbBitmapPages = 1 &lt;&lt; (dbDatabaseOffsetBits-dbBitmapSegmentBits);
00084 <span class="keyword">const</span> size_t dbDirtyPageBitmapSize = 1 &lt;&lt; (dbDatabaseOidBits-dbPageBits+dbHandleBits-3);
00085 <span class="keyword">const</span> size_t dbDefaultSelectionLimit = 2000000000;
00086 
00087 <span class="keyword">const</span> <span class="keywordtype">int</span>    dbBMsearchThreshold = 512;
00088 
00089 <span class="keyword">const</span> <span class="keywordtype">char</span>   dbMatchAnyOneChar = <span class="charliteral">'_'</span>;
00090 <span class="keyword">const</span> <span class="keywordtype">char</span>   dbMatchAnySubstring = <span class="charliteral">'%'</span>;
00091 
00092 <span class="keyword">const</span> <span class="keywordtype">int</span>    dbMaxReaders = 64; <span class="comment">// maximal number of readers concurrently accessing the database</span>
00093 
00097 <span class="keyword">enum</span> dbPredefinedIds { 
00098     dbInvalidId,
00099     dbMetaTableId, 
00100     dbBitmapId,
00101     dbFirstUserId = dbBitmapId + dbBitmapPages
00102 };
00103 
<a name="l00107"></a><a class="code" href="classdbHeader.html">00107</a> <span class="keyword">class </span><a class="code" href="classdbHeader.html">dbHeader</a> { 
00108   <span class="keyword">public</span>:
00109     offs_t size;  <span class="comment">// database file size</span>
00110     int4   curr;  <span class="comment">// current root</span>
00111     int4   dirty; <span class="comment">// database was not closed normally</span>
00112     int4   initialized; <span class="comment">// database is initilaized</span>
00113 <span class="preprocessor">#if (dbDatabaseOffsetBits &gt; 32 &amp;&amp; defined(ALIGN_HEADER)) || defined(PAD_HEADER)</span>
00114 <span class="preprocessor"></span>    int4   pad;
00115 <span class="preprocessor">#endif</span>
00116 <span class="preprocessor"></span>    <span class="keyword">struct </span>{ 
00117         offs_t index;           <span class="comment">// offset to object index</span>
00118         offs_t shadowIndex;     <span class="comment">// offset to shadow index</span>
00119         oid_t  indexSize;       <span class="comment">// size of object index</span>
00120         oid_t  shadowIndexSize; <span class="comment">// size of object index</span>
00121         oid_t  indexUsed;       <span class="comment">// used part of the index   </span>
00122         oid_t  freeList;        <span class="comment">// L1 list of free descriptors</span>
00123     } root[2];
00124     
00125     int4 majorVersion;
00126     int4 minorVersion;
00127     int4 mode;
00128 
00129     <span class="keyword">enum</span> { 
00130         MODE_OID_64        = 0x01,
00131         MODE_OFFS_64       = 0x02,
00132         MODE_AUTOINCREMENT = 0x04,
00133         MODE_RECTANGLE_DIM = 0x08
00134     };    
00135 
00136     <span class="keywordtype">int</span> getVersion() { 
00137         <span class="keywordflow">return</span> majorVersion*100 + minorVersion;
00138     }
00139     
00140     <span class="keywordtype">bool</span> isCompatible();
00141     <span class="keyword">static</span> <span class="keywordtype">int</span> getCurrentMode();
00142 };
00143 
00144 <span class="keyword">union  </span>dbSynthesizedAttribute;
00145 <span class="keyword">struct </span>dbInheritedAttribute;
00146 <span class="keyword">class </span>dbDatabaseThreadContext;
00147 <span class="keyword">class </span><a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>;
00148 <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;
00149 <span class="keyword">class </span>dbExprNode;
00150 
00151 <span class="keyword">struct </span>dbMemoryStatistic { 
00152     offs_t used;
00153     offs_t free;
00154     offs_t nHoles;
00155     offs_t minHoleSize;
00156     offs_t maxHoleSize;
00157     size_t nHolesOfSize[dbDatabaseOffsetBits];
00158 };
00159 
00160 <span class="keyword">class </span>FixedSizeAllocator
00161 {
00162     <span class="keyword">struct </span>Hole { 
00163         Hole*  next;
00164         offs_t offs;
00165     };
00166 
00167     size_t minSize;
00168     size_t maxSize;
00169     size_t quantum;
00170     size_t nChains;
00171     size_t bufSize;
00172     Hole** chains;
00173     Hole*  vacant;
00174     Hole*  holes;
00175 
00176   <span class="keyword">public</span>:
00177     size_t hits;
00178     size_t faults;
00179     size_t retries;
00180 
00181     FixedSizeAllocator();
00182     ~FixedSizeAllocator();
00183        
00184     <span class="keywordtype">void</span> init(size_t minSize, size_t maxSize, size_t quantum, size_t bufSize);
00185     <span class="keywordtype">void</span> reset();
00186 
00187     offs_t allocate(size_t size) { 
00188         <span class="keywordflow">if</span> (size - minSize &lt;= maxSize - minSize) { 
00189             size_t i = (size - minSize + quantum - 1) / quantum;
00190             Hole* hole = chains[i];
00191             <span class="keywordflow">if</span> (hole != NULL) { 
00192                 hits += 1;
00193                 chains[i] = hole-&gt;next;
00194                 hole-&gt;next = vacant;
00195                 vacant = hole;
00196                 <span class="keywordflow">return</span> hole-&gt;offs;
00197             }            
00198             faults += 1;
00199         }
00200         <span class="keywordflow">return</span> 0;
00201     }
00202     
00203     <span class="keywordtype">bool</span> free(offs_t offs, size_t size) { 
00204         <span class="keywordflow">if</span> (vacant != NULL &amp;&amp; size - minSize &lt;= maxSize - minSize) {             
00205             size_t i = (size - minSize + quantum - 1) / quantum;
00206             Hole* hole = vacant;
00207             vacant = hole-&gt;next;
00208             hole-&gt;next = chains[i];
00209             chains[i] = hole;
00210             hole-&gt;offs = offs;
00211             <span class="keywordflow">return</span> <span class="keyword">true</span>;
00212         }
00213         <span class="keywordflow">return</span> <span class="keyword">false</span>;
00214     }   
00215 };
00216 
00217 
00218 <span class="keyword">class </span>dbMonitor { 
00219   <span class="keyword">public</span>:
00220     sharedsem_t sem;
00221     sharedsem_t mutatorSem;
00222     <span class="keywordtype">int</span>  nReaders;
00223     <span class="keywordtype">int</span>  nWriters;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -