乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 26|回复: 9

[编程交流] 潜在的大型数据库

[复制链接]

6

主题

49

帖子

42

银币

初来乍到

Rank: 1

铜币
32
发表于 2022-7-5 15:54:07 | 显示全部楼层 |阅读模式
我正在寻找存储大量数据的最佳方式。我们有一个简单的产品,有数千种不同的可能配置,因为它有6个大小变量,每个都可能没有限制和微小的增量。
 
历史上,我们每次都是用一些旧的从零开始绘制。Net例程,每次引用每个例程的方式都不同。
 
每次画出其中一个,我想给它一个参考,并将所有数据存储在某处。然后我可以使用opendcl快速访问它以进行搜索、过滤和查询。
 
我正在考虑将这些数据存储在字典内的xrecords中,然后在opendcl初始化时使用odbx进行搜索。
 
我需要读写数据,您认为存储这些数据的最佳方式是什么,以便能够快速访问和搜索?
 
使用Tapatalk从my Pixel XL发送
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:02:09 | 显示全部楼层
Autocad可以与MS Acess对话,就像Excel一样,优点是Access可以拥有大量数据。它还具有index的ie快速查找方法的优点,使用索引查找10000个项目中的数据集需要15次尝试。说搜索一个包含10000行信息的TXT文件是没有效率的。我已经很久没有在二进制文件中使用get&put记录了。10K->15->找到答案。
 
如果您在谷歌上搜索或使用“帮助”,则有很多关于直接从Autocad使用外部数据库的信息。可以肯定的是,它们允许键匹配和索引搜索。我在谷歌上搜索了“autocad to access”,出现了很多代码示例。一个提示是SQL,这是大多数数据库系统背后的序列查询语言。
回复

使用道具 举报

6

主题

49

帖子

42

银币

初来乍到

Rank: 1

铜币
32
发表于 2022-7-5 16:09:28 | 显示全部楼层
我确实使用SQL来获取和存储数据,搜索速度非常快,但建立连接有一个滞后。我确实经常使用excel进行数据采集,但滞后性更大。
 
使用Tapatalk从my Pixel XL发送
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:16:49 | 显示全部楼层
AutoLisp的SQLite(由nullptr AKA Daniel编写)可能会引起兴趣。
 
多个用户会同时访问数据库吗?
 
通过ADODB连接到DB或Excel文件可以更快,并且不需要MS Office。但是为什么要关注速度呢?
 
读取CSV文件并将其转换为全局(或黑板)assoc列表可能可行吗?
 
CSV文件:
  1. idx,name
  2. 1,"John"
  3. 2,"Peter"
关联列表:
  1. (
  2. ((idx . 1) (name . "John"))
  3. ((idx . 2) (name . "Peter"))
  4. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:24:42 | 显示全部楼层
显然,lisp的关键是使用列表作为输出。
我的意见如下:
如果数据依赖于图形:我会使用字典/xrecords/xdata将其存储在dwg中或存储到所需的ACAD对象。
关于大小:如果数据量太大,我会尽量避免使用字典/xrecords/注册表。
 
数据是如何分布的
[列表]
  • 树-然后列表将变成多嵌套的,为了理解其层次结构(使用多嵌套列表或手动),可能您的数据和子数据应该像文件夹和子文件夹一样存储
    原子可能代表一个。txt文件。
    这在某种程度上与这个想法有关。
     
  • 矩阵表-然后列表将均匀嵌套,数据将通过excel轻松维护(使用lisp,您可以通过矩阵列表访问数据)。
    正如罗伊所指出的,但我会避免使用点对,而是使用子列表(虽然它们提供了更快、更简单的访问,但它们可能会破坏您对项目访问方式的可视化,这将导致令人难以置信的错误)。
     
  • 组合-作为层次结构的多嵌套列表(其中数据存储在文件夹和子文件夹中),但原子表示包含矩阵列表信息的excel文件。
    [/列表]
    您也可以将整个矩阵或多嵌套列表保存在一个。txt文件(可以轻松维护)并读取“n”,使用lisp将其评估为有效列表。
     
    关于速度:我不知道该回答什么,因为我从来没有这样的任务或经验。
    所以只要想一想什么是最好的方式(坚持接吻原则),然后尝试创建所需的子功能。
  • 回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-5 16:34:06 | 显示全部楼层
    滞后是什么?一秒钟,一分钟?是来自云端吗
    你能提供更多细节吗。
    回复

    使用道具 举报

    18

    主题

    1529

    帖子

    973

    银币

    中流砥柱

    Rank: 25

    铜币
    649
    发表于 2022-7-5 16:38:01 | 显示全部楼层
    @Grrr:你说你想避免点对。这是不是意味着你更喜欢这个
    1. (
    2. ((idx 1) (name "John"))
    3. ((idx 2) (name "Peter"))
    4. )
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    325
    发表于 2022-7-5 16:43:49 | 显示全部楼层
    就像这样,罗伊:
     
    CSV文件:
    1. idx,name,phone,address
    2. 1,"Alan",7676,"Washington DC"
    3. 2,"Brian",2424,"Boston"
    4. 3,"Chad",3232,"NY"

     
    矩阵关联列表:
    1. (setq L
    2. '(
    3.    (idx name phone address)
    4.    (1 "Alan" 7676 "Washington DC")
    5.    (2 "Brian" 2424 "Boston")
    6.    (3 "Chad" 3232 "NY")
    7. )
    8. )

     
    一些搜索功能如下:
    1. ; _$ (FindItem 'name "John" L) -> nil
    2. ; _$ (FindItem 'name "Brian" L) -> (2 "Brian" 2424 "Boston")
    3. ; _$ (FindItem 'phone 3232 L) -> (3 "Chad" 3232 "NY")
    4. (defun FindItem ( key val L / aL n )
    5. (setq aL (apply 'mapcar (cons 'list L)))
    6. (if (setq n (vl-position val (assoc key aL)))
    7.    (mapcar (function (lambda (x) (nth n x))) aL)
    8. )
    9. )

     
    编辑:
    我同意它比经典(cdr(assoc…)慢这是罗伊建议的,但列表更具可读性,因为你不必将每个项目分成一对虚线。
     
    还有一个类似搜索的功能:
    1. (setq L
    2. '(
    3.    (idx name phone address)
    4.    (1 "Alan" 7676 "Washington DC")
    5.    (2 "Brian" 2424 "Boston")
    6.    (3 "Chad" 3232 "NY")
    7.    (4 "Derek" 0321 "Florida")
    8.    (5 "Amber" 3021 "Boston")
    9.    (6 "Cortney" 1210 "Florida")
    10.    (7 "Andrew" 9292 "Texas")
    11. )
    12. )
    13. ; _$ (FindItems 'name "C*" L) -> ((3 "Chad" 3232 "NY") (6 "Cortney" 1210 "Florida"))
    14. ; _$ (FindItems 'address "B*" L) -> ((2 "Brian" 2424 "Boston") (5 "Amber" 3021 "Boston"))
    15. ; _$ (FindItems 'phone "3*" L) -> ((3 "Chad" 3232 "NY") (4 "Derek" 321 "Florida") (5 "Amber" 3021 "Boston"))
    16. ; _$ (FindItems 'name "H*" L) -> nil
    17. (defun FindItems ( key val L / ToStr i aL nL )
    18. (setq ToStr (lambda (x) (strcase (cond ((eq 'STR (type x)) x) ((vl-prin1-to-string x))))))
    19. (setq val (ToStr val))
    20. (setq aL (apply 'mapcar (cons 'list L)))
    21. (setq i 0)
    22. (if
    23.    (setq nL
    24.      (apply 'append
    25.        (mapcar
    26.          (function
    27.            (lambda (x)
    28.              (setq i (1+ i))
    29.              (if (wcmatch (ToStr x) val)
    30.                (list i)
    31.              )
    32.            )
    33.          )
    34.          (cdr (assoc key aL))
    35.        )
    36.      )
    37.    )
    38.    (mapcar (function (lambda (x) (nth x L))) nL)
    39. )
    40. ); defun FindItems

     
    电话键有点问题——如果所有原子都是字符串,可能会更好?
    回复

    使用道具 举报

    18

    主题

    1529

    帖子

    973

    银币

    中流砥柱

    Rank: 25

    铜币
    649
    发表于 2022-7-5 16:47:59 | 显示全部楼层
    1. (setq LstA
    2. '(
    3.    ((idx . 1) (name . "Alan")  (phone . 7676) (address . "NY"))
    4.    ((idx . 2) (name . "Brian") (phone . 2424) (address . "Boston"))
    5.    ((idx . 3) (name . "Chad")  (phone . 3232) (address . "NY"))
    6. )
    7. )
    8. ; (FindItemsA 'address (lambda (str) (= "NY" str)) lstA)
    9. ; (FindItemsA 'phone (lambda (num) (< num 6000)) lstA)
    10. (defun FindItemsA (key valPred lst)
    11. (vl-remove
    12.    nil
    13.    (mapcar '(lambda (sub) (if (valPred (cdr (assoc key sub))) sub)) lst)
    14. )
    15. )
    回复

    使用道具 举报

    5

    主题

    956

    帖子

    963

    银币

    初来乍到

    Rank: 1

    铜币
    35
    发表于 2022-7-5 16:55:42 | 显示全部楼层
     
    1. (defun foo (key pat lst / l n )
    2. (foreach x lst
    3.    (if
    4.      (wcmatch  (if (numberp (setq n (cdr (assoc key x)))) (itoa n) n) pat)
    5.       (setq l (cons x l))
    6.    )
    7. )
    8. l
    9. )
    10. ;Roy's data format
    11. (foo 'address "*on*" LstA)
    12. ;(((IDX . 2) (NAME . "Brian") (PHONE . 2424) (ADDRESS . "Boston")))
    13. (foo 'name "C*" LstA)
    14. ;(((IDX . 3) (NAME . "Chad") (PHONE . 3232) (ADDRESS . "NY")))
    15. (foo 'phone "*24*" LstA)
    16. ;(((IDX . 2) (NAME . "Brian") (PHONE . 2424) (ADDRESS . "Boston")))

     
    1. ;;;Grrr's data format
    2. (defun bar (key pat lst / l n)
    3. (foreach x (cdr lst)
    4.    (if        (wcmatch
    5.   (if (numberp (setq n (nth (vl-position key (car lst)) x)))
    6.     (itoa n)
    7.     n
    8.   )
    9.   pat
    10. )
    11.      (setq l (cons x l))
    12.    )
    13. )
    14. l
    15. )
    16. (bar 'name "*ew*" L)
    17. ;((7 "Andrew" 9292 "Texas"))
    18. (bar 'phone "*32*" L)
    19. ;((4 "Derek" 321 "Florida") (3 "Chad" 3232 "NY"))
    20. (bar 'address "*da*" L)
    21. ;((6 "Cortney" 1210 "Florida") (4 "Derek" 321 "Florida"))

     
    我的0.02美元XML怎么样?
    回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-14 13:08 , Processed in 2.090675 second(s), 72 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表