V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PendingOni
V2EX  ›  程序员

[技术]-没有 ORM 的架构

  •  
  •   PendingOni ·
    Komi-Thaw · 43 天前 · 3210 次点击
    这是一个创建于 43 天前的主题,其中的信息可能已经有所发展或是发生改变。
    USE [lysk2]
    GO
        /****** Object:  StoredProcedure [dbo].[P_EvacuateNodes]    Script Date: 2023/11/30 8:25:41 ******/
    SET
        ANSI_NULLS ON
    GO
    SET
        QUOTED_IDENTIFIER ON
    GO
        ALTER proc [dbo].[P_EvacuateNodes] @node int = 999 as begin truncate table CalStartTab;
    
    EXEC P_CalculateStartProc @node;
    
    truncate table CalEndTab;
    
    EXEC P_CalculateEndProc @node;
    
    truncate table EvacEvenNodesTab;
    
    insert into
        EvacEvenNodesTab
    SELECT
        tp.*
    FROM
        (
            SELECT
                TOP 100 PERCENT ROW_NUMBER() OVER (
                    partition BY ddid
                    ORDER BY
                        wtime
                ) AS rowNum,
                sid,
                tid,
                ygid,
                wtime,
                ddid
            FROM
                WFRecord
            WHERE
                id IN (
                    SELECT
                        id
                    FROM
                        WFRecord wf
                        INNER JOIN CalStartTab s ON wf.ddid = s.ddid
                        INNER JOIN CalEndTab e ON wf.ddid = e.ddid
                    WHERE
                        (
                            sid = @node
                            OR tid = @node
                        )
                        AND wtime >= s.minTime
                        AND wtime <= e.maxTime
                    GROUP BY
                        wf.ddid,
                        wf.id
                )
            ORDER BY
                wtime
        ) tp
    WHERE
        tp.rowNum % 2 = 0 truncate table EvacOddNodesTab;
    
    insert into
        EvacOddNodesTab
    SELECT
        tp.*
    FROM
        (
            SELECT
                TOP 100 PERCENT ROW_NUMBER() OVER (
                    partition BY ddid
                    ORDER BY
                        wtime
                ) AS rowNum,
                sid,
                tid,
                ygid,
                wtime,
                ddid
            FROM
                WFRecord
            WHERE
                id IN (
                    SELECT
                        id
                    FROM
                        WFRecord wf
                        INNER JOIN CalStartTab s ON wf.ddid = s.ddid
                        INNER JOIN CalEndTab e ON wf.ddid = e.ddid
                    WHERE
                        (
                            sid = @node
                            OR tid = @node
                        )
                        AND wtime >= s.minTime
                        AND wtime <= e.maxTime
                    GROUP BY
                        wf.ddid,
                        wf.id
                )
            ORDER BY
                wtime
        ) tp
    WHERE
        tp.rowNum % 2 = 1
    end
    

    突然翻到之前自己写的存储过程 现在看看都是头皮发麻 公司框架用的还是 .Net Framework 4.5

    直接用 CYQ.Data 和数据库交互 sql 中 order by 还失效 必须先查询加载到内存后再排序

    之前一直用的是 EF 或者 EF Core 也用过 SqlSugar 这样的第三方框架

    image.png

    27 条回复    2024-03-16 15:38:45 +08:00
    ZGame
        1
    ZGame  
       43 天前
    SqlSugar 挺好用的,存储过程更像调用别人写的方法,适合交付和程序对接使用吧。
    Braisdom
        2
    Braisdom  
       43 天前   ❤️ 1
    现在已经很少有人用 ORM 了,

    1 )我总曾经的开源项目: https://github.com/braisdom/ObjectiveSql 已经好久没更新了,

    2 )我现在的商业化项目: https://www.agiquery.com 已经不用写 SQL 了哈哈
    ZGame
        3
    ZGame  
       43 天前
    @Braisdom 老哥你的框架有点像 c# 的 linq 或者 java 的 jooq ,在往上封装就是 orm 了
    Braisdom
        4
    Braisdom  
       43 天前   ❤️ 1
    @ZGame 是的,但后来发现这样做下去还是要编程,所以 做了 Agile Query ,就不要编程了,哈哈
    matrix1010
        5
    matrix1010  
       43 天前 via iPhone   ❤️ 2
    @Braisdom 你的项目不更新就代表很少有人用 ORM?
    heyline
        6
    heyline  
       43 天前
    @Braisdom 你这个和 cube.js 啥的有啥区别
    Removable
        7
    Removable  
       43 天前
    @matrix1010 #5 要创业嘛,不说点夸张的话,怎么能吸引到使用者呢 (狗头
    Braisdom
        8
    Braisdom  
       43 天前   ❤️ 1
    @matrix1010 当然不是了,我自己用了很多年的 ORM ,ORM 只能解决很少的问题,可能适用少部分项目,我做的大都数项目都不用 SQL 型数据库了,所以 ORM 也就更用不上了。

    目前,系统数据库我都不会先 SQL 型数据库,只有在数据分析行业才会有 SQL 型数据库,但数据分析型项目,ORM 解决的问题太少了,大都数都是手写 SQL 。

    所以,我才会做 Agile Query 项目,它自身的数据存储不是 SQL 型数据库,ORM 也就没用了。
    Braisdom
        9
    Braisdom  
       43 天前   ❤️ 1
    @heyline 和 cube.js 最核心的区别是:Agile Query 做数据分析不需要关心 JOIN ,还有很多领域分析函数,像:同环比,占比,分类等。
    perbugwei
        10
    perbugwei  
       43 天前
    @Braisdom 很少用 ORM 了?不是吧,这是怎么总结出来的结论呀。有啥数据支撑么
    Braisdom
        11
    Braisdom  
       43 天前   ❤️ 1
    @perbugwei 不是数据支撑,当你项目做过了以后就会感觉,系统数据用 SQL 型数据库存储,会使代码很复杂,现在很多非 SQL 型数据库,对编程很友好的,建议试试。
    ericguo
        12
    ericguo  
       43 天前   ❤️ 1
    现在软广的水平已经那么高了么?
    perbugwei
        13
    perbugwei  
       43 天前
    @Braisdom 你这个非 sql 型数据库是指哪些
    Braisdom
        14
    Braisdom  
       43 天前   ❤️ 1
    @perbugwei 我现在用的是 arangodb , 主要是支持 图,全文搜索,Embedding ,还有简单的关系统计,它的查询语言与编程语言比较接近,我的 Agile Query 主要用到的也就这些,他还有很多其它的能力,
    cndenis
        15
    cndenis  
       43 天前
    这种同时用上开窗, 聚合, JOIN, 子查询的的 SQL, 原生 SQL 是王道, 用 ORM 才是让人头疼的事
    matrix1010
        16
    matrix1010  
       43 天前
    @Removable 这已经算造谣了,就算是 APIJSON 宣传也是夸自己多万能而不是说 xxx 已经没人用了。错误的宣传只会起到反作用
    Braisdom
        17
    Braisdom  
       43 天前   ❤️ 1
    @cndenis 哪也不一定的,你可以看看这样的 SQL 是不是复杂,照样不用人肉写的:
    nian8
        18
    nian8  
       43 天前
    感觉像是 excel + 搜索 + 自定义规则/函数
    数据来源及元数据的信息需要很熟悉,才能用起来吧

    我没用过。。。
    Braisdom
        19
    Braisdom  
       43 天前
    @nian8 实际使用都不需要关心无数据,只需要知道领域知识就可以了,输入关键字,直接出数据报告,
    leegradyllljjjj
        20
    leegradyllljjjj  
       43 天前
    @Braisdom 这不就是个报表?
    Braisdom
        21
    Braisdom  
       43 天前
    @leegradyllljjjj 差不多是这个样子,但 Agile Query 做一个报表只要几秒钟,而且还不需要二次开发,哈哈
    roundgis
        22
    roundgis  
       43 天前 via Android
    @Braisdom arangodb. 感覺很少人用。穩定嗎?
    Braisdom
        23
    Braisdom  
       43 天前
    @roundgis 相当稳定,国外用的人很多。
    Braisdom
        24
    Braisdom  
       43 天前
    @roundgis 至少比 MySQL 的 Bug 少太多了
    roundgis
        25
    roundgis  
       43 天前 via Android
    @Braisdom 你用社區版還是企業版 兩三年前曾經測試過 這兩個版本差別有些大 後者功能多很多
    Braisdom
        26
    Braisdom  
       43 天前
    @roundgis 社區版,用了好久了,基本没啥问题
    roundgis
        27
    roundgis  
       42 天前 via Android
    @Braisdom 謝謝 最近有個項目打算試試用一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2566 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:39 · PVG 23:39 · LAX 08:39 · JFK 11:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.