We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
仅限中文
我们将启动新的分库分表特性支持。
为了支持分库分表,一个重要的抽象就是处理结果集,这个抽象被我命名为:
type Merger interface { Merge(ctx context.Context, results []*sql.Rows) (sql.Rows, error) }
它会作为一个非常独立的模块,暂时放进去 internal/merger 包里面。
整个 merge 包必须完全独立,即不依赖与 eorm 的其它任何包,后面我会考虑将它拆出去作为一个独立的项目。这主要是因为后面我不仅考虑结合 ORM 来做分库分表,还想设计一个纯粹的分库分表的 driver,或者一个分库分表的 proxy,sidecar 等。
同时,你还需要提供一个最基本的实现,即批量查询的实现。
例如我们可以预期一个查询 select * from user_tab where id in (1, 2, 3) 那么会被分库分表成三个查询,这个实现就是将这三个查询的结果汇总在一起。
但是需要注意的是,该实现要考虑性能问题,即如果多个查询总共返回数十万行数据,该如何处理。核心就是要避免自己提前调用 Next 将所有的数据都取过来,然后缓存在内存里面,而是应该在用户调用 Next 的时候再调用一个 results 里面特定的 sql.Rows 的 Next 方法。
The text was updated successfully, but these errors were encountered:
sql.Rows 没有对外暴露合并的API吧,只能自己定义一个Rows,然后类似迭代器的设计,当外部调用Next的时候,取result 其中 的一个 sql.Rows 的 Next
Sorry, something went wrong.
对的
Successfully merging a pull request may close this issue.
仅限中文
使用场景
我们将启动新的分库分表特性支持。
为了支持分库分表,一个重要的抽象就是处理结果集,这个抽象被我命名为:
它会作为一个非常独立的模块,暂时放进去 internal/merger 包里面。
整个 merge 包必须完全独立,即不依赖与 eorm 的其它任何包,后面我会考虑将它拆出去作为一个独立的项目。这主要是因为后面我不仅考虑结合 ORM 来做分库分表,还想设计一个纯粹的分库分表的 driver,或者一个分库分表的 proxy,sidecar 等。
同时,你还需要提供一个最基本的实现,即批量查询的实现。
例如我们可以预期一个查询 select * from user_tab where id in (1, 2, 3) 那么会被分库分表成三个查询,这个实现就是将这三个查询的结果汇总在一起。
但是需要注意的是,该实现要考虑性能问题,即如果多个查询总共返回数十万行数据,该如何处理。核心就是要避免自己提前调用 Next 将所有的数据都取过来,然后缓存在内存里面,而是应该在用户调用 Next 的时候再调用一个 results 里面特定的 sql.Rows 的 Next 方法。
The text was updated successfully, but these errors were encountered: