Coder Social home page Coder Social logo

nmsql's Issues

接口对不上啊,见下文

接口对不上啊,见下文

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

vm和dbengine接口数据格式

vm传入数据:

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

括号中代表字节数

dbengine返回数据

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

关于callback调用

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

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

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

dbengine 返回数据再利用问题

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

我想的解决方案有两种:

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

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

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

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

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

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

@osmium18452

record number相关问题

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

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

接口间字符串传递问题

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

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

然后就有了几个问题:

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

暂时就想得到这几个问题

Vm 及 cursor查找的问题

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

数据库元信息有哪些?

我能想到的需要

  • 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.