Enhanced mount table
parent
69233e7092
commit
36462a8b3c
37
README.MD
37
README.MD
|
@ -18,13 +18,13 @@ STVM(truck of Virtual memory table)是一个开源的使用ANSI C语言编
|
||||||
***使用须知***
|
***使用须知***
|
||||||
* 表空间大小在创建时已经确定, 一旦创建不能随意修改大小。
|
* 表空间大小在创建时已经确定, 一旦创建不能随意修改大小。
|
||||||
* 多机集群无法使用事务。
|
* 多机集群无法使用事务。
|
||||||
* 数据无法持久化(宕机情况)。
|
* 数据无法持久化(宕机情况), 可以定时利用接口备份。
|
||||||
* 索引长度限制(默认64字节),修改需编译项目。
|
* 索引长度限制(默认64字节),修改需编译项目。
|
||||||
* 启动后不能修改表字段,但可以修改字段别名
|
* 启动后不能修改表字段,但可以修改字段别名
|
||||||
|
|
||||||
建议使用场景:***数据库缓存、数据缓存、事件驱动***
|
建议使用场景:***数据库缓存、数据缓存、事件驱动***
|
||||||
|
|
||||||
不定时更新 https://my.oschina.net/deffpuzzl/blog/1627626
|
不定时更新 https://my.oschina.net/deffpuzzl/blog/1627626
|
||||||
|
|
||||||
## 1、编译
|
## 1、编译
|
||||||
**编译项目**
|
**编译项目**
|
||||||
|
@ -46,17 +46,20 @@ cd src目录 **./make**
|
||||||
* **TVMCFG=$(TVMDBD)/.tvm.run** 启动参数
|
* **TVMCFG=$(TVMDBD)/.tvm.run** 启动参数
|
||||||
|
|
||||||
使用方法:
|
使用方法:
|
||||||
如果不使用多机集群,无需配置域文件,缺省本地启动。
|
如果不使用多机集群,无需配置域文件,缺省本地启动(该版本对集群支持较弱, 时间有限,稍后更新,请悉知)。
|
||||||
|
|
||||||
启动系统
|
启动系统
|
||||||
> stvm -w
|
> stvm -w
|
||||||
|
|
||||||
停止系统
|
停止系统
|
||||||
> stvm -s
|
> stvm -s
|
||||||
|
|
||||||
STVM也提供一个类型sqlpuls类型简单工具。
|
STVM也提供一个类型sqlpuls类型简单工具。
|
||||||
进入SQL界面, 该工具主要用来运维调试使用
|
进入SQL界面, 该工具主要用来运维调试使用,其中showmode显示模式ROW|COLUMN,showsize单次显示记录数,也可用封装该指令的脚本**msql**进入
|
||||||
> stvm SQL
|
> stvm SQL --showmode=row --showsize=8
|
||||||
|
|
||||||
|
批量执行M-SQL脚本**exsql**,也可直接执行
|
||||||
|
>stvm SQL --msql=msql.bat
|
||||||
|
|
||||||
域的维护
|
域的维护
|
||||||
> stvm DOM
|
> stvm DOM
|
||||||
|
@ -67,7 +70,7 @@ STVM也提供一个类型sqlpuls类型简单工具。
|
||||||
配置域完成后,可以配置编译到$TVMCFG下
|
配置域完成后,可以配置编译到$TVMCFG下
|
||||||
> stvm -c stvm.conf
|
> stvm -c stvm.conf
|
||||||
|
|
||||||
然后在stvm -w启动即可
|
然后在 **stvm -w** 启动即可
|
||||||
|
|
||||||
建议以单机模式64位下运行,将性能发挥在极致。
|
建议以单机模式64位下运行,将性能发挥在极致。
|
||||||
|
|
||||||
|
@ -116,19 +119,15 @@ STVM也提供一个类型sqlpuls类型简单工具。
|
||||||
>* 1、新增queue网络同步异步接口
|
>* 1、新增queue网络同步异步接口
|
||||||
>* 1、新增将表中长时间无用数据导出备份接口
|
>* 1、新增将表中长时间无用数据导出备份接口
|
||||||
|
|
||||||
|
队列的创建与表类似:
|
||||||
|
队列不支持创建索引,队列创建有2种类型,基于表队列和字符串队列,详见API。
|
||||||
|
创建队列语法示例:
|
||||||
|
在M-SQL中执行 create que_user_info.def
|
||||||
|
|
||||||
|
|
||||||
**下本版本:**
|
**下本版本:**
|
||||||
* 1、新增多机资源共享方式。
|
* 1、新增多机资源共享方式。
|
||||||
* 2、JAVA接口开发
|
* 2、JAVA接口开发
|
||||||
|
|
||||||
|
|
||||||
**不定时更新**
|
**不定时更新**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
#### *常见错误集合* ####
|
|
||||||
```
|
|
||||||
Q、failed to boot TVM, Invalid parameter or sem has disappeared
|
|
||||||
A:echo "500 X X X" > /proc/sys/kernel/sem
|
|
||||||
```
|
|
||||||
|
|
26
src/tree.c
26
src/tree.c
|
@ -11116,6 +11116,7 @@ long lDumpTable(SATvm *pstSavm, TABLE t)
|
||||||
return RC_FAIL;
|
return RC_FAIL;
|
||||||
}
|
}
|
||||||
fwrite(pGetTblDef(t), sizeof(TblDef), 1, fp);
|
fwrite(pGetTblDef(t), sizeof(TblDef), 1, fp);
|
||||||
|
fwrite(&pstRun->m_lType, sizeof(pstRun->m_lType), 1, fp);
|
||||||
|
|
||||||
pstSavm->lSize = lGetRowSize(t);
|
pstSavm->lSize = lGetRowSize(t);
|
||||||
if(TYPE_MQUEUE == pstRun->m_lType)
|
if(TYPE_MQUEUE == pstRun->m_lType)
|
||||||
|
@ -11142,12 +11143,13 @@ long lDumpTable(SATvm *pstSavm, TABLE t)
|
||||||
long lMountTable(SATvm *pstSavm, char *pszFile)
|
long lMountTable(SATvm *pstSavm, char *pszFile)
|
||||||
{
|
{
|
||||||
TblDef sf;
|
TblDef sf;
|
||||||
|
uint lType;
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
|
ulong uTimes = 0;
|
||||||
long lEffect = 0;
|
long lEffect = 0;
|
||||||
void *pvData = NULL;
|
void *pvData = NULL;
|
||||||
RunTime *pstRun = NULL;
|
RunTime *pstRun = NULL;
|
||||||
RWLock *prwLock = NULL;
|
RWLock *prwLock = NULL;
|
||||||
ulong uTimes = 0, lRet;
|
|
||||||
|
|
||||||
if(!pszFile || !pstSavm || !strlen(pszFile))
|
if(!pszFile || !pstSavm || !strlen(pszFile))
|
||||||
{
|
{
|
||||||
|
@ -11162,12 +11164,31 @@ long lMountTable(SATvm *pstSavm, char *pszFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
fread(&sf, sizeof(TblDef), 1, fp);
|
fread(&sf, sizeof(TblDef), 1, fp);
|
||||||
|
fread(&lType, sizeof(lType), 1, fp);
|
||||||
if(RC_SUCC != lInitSATvm(pstSavm, sf.m_table))
|
if(RC_SUCC != lInitSATvm(pstSavm, sf.m_table))
|
||||||
goto MOUNT_ERROR;
|
{
|
||||||
|
if(pstSavm->m_lErrno != TBL_NOT_FOUND)
|
||||||
|
goto MOUNT_ERROR;
|
||||||
|
|
||||||
|
sf.m_lGroup = 0;
|
||||||
|
sf.m_lValid = 0;
|
||||||
|
sf.m_lTreePos = 0;
|
||||||
|
sf.m_lTreeRoot = 0;
|
||||||
|
sf.m_lGroupPos = 0;
|
||||||
|
sf.m_lGroupRoot= 0;
|
||||||
|
sf.m_lListPos = 0;
|
||||||
|
sf.m_lListOfs = 0;
|
||||||
|
memcpy((void *)pGetTblDef(sf.m_table), (void *)&sf, sizeof(TblDef));
|
||||||
|
if(RC_SUCC != _lCustomTable(pstSavm, sf.m_table, sf.m_lMaxRow, false, lType))
|
||||||
|
goto MOUNT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if(NULL == (pstRun = (RunTime *)pInitHitTest(pstSavm, sf.m_table)))
|
if(NULL == (pstRun = (RunTime *)pInitHitTest(pstSavm, sf.m_table)))
|
||||||
goto MOUNT_ERROR;
|
goto MOUNT_ERROR;
|
||||||
|
|
||||||
|
pstRun->m_lType = lType;
|
||||||
|
pstRun->m_lRowSize = sf.m_lReSize;
|
||||||
|
pstRun->m_lLocal = RES_LOCAL_SID;
|
||||||
if(sf.m_lReSize != lGetRowSize(sf.m_table))
|
if(sf.m_lReSize != lGetRowSize(sf.m_table))
|
||||||
{
|
{
|
||||||
vTblDisconnect(pstSavm, pstSavm->tblName);
|
vTblDisconnect(pstSavm, pstSavm->tblName);
|
||||||
|
@ -11183,6 +11204,7 @@ long lMountTable(SATvm *pstSavm, char *pszFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
pstSavm->pstVoid = pvData;
|
pstSavm->pstVoid = pvData;
|
||||||
|
pstSavm->tblName = sf.m_table;
|
||||||
pstSavm->lSize = sf.m_lReSize;
|
pstSavm->lSize = sf.m_lReSize;
|
||||||
prwLock = (RWLock *)pGetRWLock(pstRun->m_pvAddr);
|
prwLock = (RWLock *)pGetRWLock(pstRun->m_pvAddr);
|
||||||
if(RC_SUCC != pthread_rwlock_wrlock(prwLock))
|
if(RC_SUCC != pthread_rwlock_wrlock(prwLock))
|
||||||
|
|
Loading…
Reference in New Issue