【问题标题】:I want to create a desktop app with database-like search functions but without the SQL database我想创建一个具有类似数据库搜索功能但没有 SQL 数据库的桌面应用程序
【发布时间】:2020-05-11 01:24:13
【问题描述】:

我知道基本的 SQL,而且在存储和检索数据方面我只知道 SQL。我想创建 1 个 .exe,它应该包含所有 ~100,000 个键值对(我在 .txt 文件中有数据),也许还有一个额外的描述属性(我会自己添加 - 就像给自己的注释一样)。

我也想用一种我还不知道的新语言来写它;像 python 或 C#(我用 Java 和 VB.net 编写的桌面应用程序都使用 SQL 数据库)。所以语言不是问题,我会很感激建议。

这些键值对可能不需要更新,我愿意重新编译/重新打包代码以对数据进行 1 次更改。密钥长 6 个字母,末尾有 2 个数字,如 hxnaaa01。这些字母中的每一个都代表或描述了自己的某些东西,因此我还需要在特定位置搜索特定字母才能得到我需要的东西。

我知道正则表达式可以很好地满足我的需求,但我所提到的只是我所知道的。我知道的不够多,也不知道用什么关键词去google。

我已阅读有关 XML 和 CSV 的信息。我真的不知道它们是什么,我不确定所有这些如何适合 1 个可执行文件。

总而言之,我需要:

  • 1 个可执行文件(Windows 桌面应用程序)
  • 搜索功能 ~100k KVP+1more 属性(使用正则表达式?)
  • 没有数据库
  • 带有图形用户界面
  • 能够为每个 KVP 添加“注释”
  • 应该是快速和轻量级的

【问题讨论】:

  • 你考虑过 JSON 吗?它允许您将数据存储为对象,包含属性和值(键/值),然后您可以决定如何组织它,添加额外的属性(ex 的描述)。甚至 SQLite?但是,物理文件通常不适合快速或轻量级。
  • @Isolated 我刚刚从另一个question 中读到,仅使用 1 个文件(至少对于 SQLite)是不可能拥有持久数据库的。除了 .exe 之外,还必须有另一个文件。它是否正确?还有其他方法吗? JSON 会在 1 个 .exe 文件中执行吗?
  • 只要速度快,我愿意换成几 MB 大。
  • JSON 不是数据库,它是一种格式,因此如果您的编程语言可以支持它,那么应该没有问题。当您发布引用 C# 的链接时,我会想象您会使用它。我建议您看看这里:docs.microsoft.com/en-us/dotnet/standard/serialization/… 但是,您无法避免存在其他文件,如果除了 .exe 之外您根本没有任何文件,那么内存中是您唯一的选择,或者是远程的。
  • @Isolated 不能将 JSON 或文本文件打包在 exe 中吗?您是说要使数据持久化,例如 starring(添加到收藏夹)一个特定的 KVP,就意味着多个文件?

标签: windows search desktop-application key-value no-database


【解决方案1】:

1 个可执行文件(Windows 桌面应用程序),无数据库

数据持久性将需要额外的文件或数据库。这几乎是不可避免的,您可以将数据存储在内存中,但它只会在内存中持续存在。

您还有另一个要求:“快速且轻量级”。

要实现这一要求,您需要认真考虑您的解决方案、您使用的技术以及将来如何改进它。

虽然搜索数据非常简单,但有效的解决方案却并非如此。它需要对算法、数据结构和一般实践进行前期研究。 (这本身就是一个兔子洞)。

在 JSON [1] 的情况下,您需要创建一个额外的文件来包含所有键/值对,您可以使用 C# 创建额外的文件(例如,在首次启动时)。

JSON 承诺是轻量级的,我倾向于同意,有些可能不同意。在处理文件系统时,我认为它通常与轻量级解决方案远离

虽然 JSON 可读性很强:

{
  "key": "value",
  "comment": "oh this is cool"
}

有很多因素会影响快速和轻量级,因此您需要进行一些研究。

老实说,根据您的经验,我不会过多关注快速,我会更多地关注它的工作,然后将其重构为快速 如果太慢。 [2]

再一次,根据您的经验,我会坚持打开文件,使用 for/loop 来查找我的密钥并使用找到的数据做一些事情,并奖励自己拥有一些有用的东西。

TL;DR:您需要一个文件或数据库来实现真正的持久存储,JSON 或远程托管的 MySQL 都可以。在你拥有工作的东西之前,尽量不要过多地关注快速

【讨论】:

  • 当然,硬编码数组或字典中的所有数据,如果您已经知道数据,请使用函数对其进行搜索。虽然硬编码 100k 键/值将非常乏味,但它会起作用。一个文件变成两个文件真的那么糟糕吗?您仍然可以将其作为一个可执行文件交付,并且您或伙伴可以在需要时删除额外的文件。
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多