Coder Social home page Coder Social logo

nmsql's People

Contributors

eziozz avatar osmium18452 avatar qingqiz avatar reaperzsy avatar zhaoyiping0622 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Forkers

ptvmiku eziozz

nmsql's Issues

record number相关问题

我发现sqlite好多操作都是直接将record number压栈,我们还要不要保留record number这东西。
如果保留的话,dbengine需要给我增加接口。
如果不保留的话,每次压栈一个记录有可能会有性能损耗,以及之后可能会碰到一些其他问题(我猜的)。

关于callback调用

callback 操作是出栈p1个元素,放进一个数组中 调用callback函数,p1个元素就是结果的p1列

在这里规定一下,栈顶是第0列,然后是第1列,以此类推

在callback函数调用中,传入的元素内容也是以dbengine和vm数据调用格式存储,具体见#40

接口间字符串传递问题

上次说到:vm调用dbendine接口时传入的字符串是如下形式的:

Offset1
Offset2
...
OffsetN
String1
String2
...
StringN

然后就有了几个问题:

  • 这里的偏移需要改成长度,如果不改,如何知道最后一个字符串何时结束(第一个offset一直是0,感觉有点浪费)
  • 每个字符串是否要保留零字符
  • dbengine返回的字符串是否要遵循以上格式
  • vm得到dbengine返回的字符串是否要将offset头部去掉再将字符串压栈(具体指的是FullKey这个IR如何处理,其他IR还没看)

暂时就想得到这几个问题

dbengine 返回数据再利用问题

dbengine返回的数据全是字符串,但是当我们要对数据排序的时候,需要知道数据的类型,但是vm这一层只能知道vm返回的数据有几列,每一列数据的字符串形式是怎样的,不知道类型。

我想的解决方案有两种:

  1. dbengine返回的数据用1个字节表示这个数据是什么类型的
  2. 增加类型相关的IR,由前端来指定将此数据的某一列变换为某类型的数据,并压栈

bugs on update

  • 表结构 create table xxx(a int);

  • 语句 update xxx set a=2 where a=1;

    9UK5M7GRX17JI2B GJ%PGHJ

  • 第20条close了0 第22条又rewind了0

接口对不上啊,见下文

接口对不上啊,见下文

-[ ] insert 时要插入 key-value 对,但是 Btree 的接口里没给 value
-[ ] erase 时要只要删除一个节点就可以了,不需要key

Vm 及 cursor查找的问题

当查找失败时,sqlite关于cursor指向下一个还是前一个语焉不详,我想统一一下,所有涉及查找的操作都是lower_bound,及存在时指向存在的位置,否则指向第一个大于它的位置

关于dbengine使用聚簇索引和二级索引方式的建议

NMSQL中分为两种索引:聚簇索引(clustered index)和次要索引(secondary index)。这两种索引都是一种差不多的B+树。

一张表有且只有一个聚簇索引,也就是只有一个主键(虽然主键是一个逻辑上的概念,这里先这么叫)。主键会决定了数据的真实存储位置。次要索引可以有很多,不会影响数据的实际存储位置。

dbengine使用B+Tree接口的时候需要注意以下几点:

  1. 如果用户没有指定建立一个聚簇索引,那么dbengine需要创建一个虚拟的主键,用于聚簇。
  2. 聚簇索引的lead node存的是真实的数据,而次要索引存的leaf node存的data是用于聚簇的主键(不直接存row pointer是为了减少节点合并和分裂时候的开销)。
  3. 对一张表进行操作的时候,要对所以的索引进行同步的操作。

@osmium18452

vm和dbengine接口数据格式

vm传入数据:

[len(2),flag(1),null(1),string(len)]+

括号中代表字节数

dbengine返回数据

len(4)[len(2),flag(1),null(1),string(len)]+

数据库元信息有哪些?

我能想到的需要

  • PageSize(4k)
  • 当前最大的 page 号
  • 所有小于最大 page 的可用的 page 号 (优化 CreatePage)
  • NMSqL_Master 表的 根 page 号
  • 所有表的名字(这个存疑,应为前端需要加一个获取所有表名字的接口,不知道能否用其他实现方式)

opPut 的问题

  • sqlite 中 opPut 默认是将 NewRecno 和 MakeRecord 的结果进行出栈
  • 我们将 NewRecno 删除了
  • opPut 的默认 key 部分怎么搞

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.