vcard 与联系人的 sql-table
vcard vs sql-table for contacts
前几天我在看 SOGo SQL tables 时看到记录被存储为 vcard 数据而不是精细的 table 具有不同的列,如姓氏,phone数等
虽然有一个名为 sogo_quick_contacts 的 table 具有我期望的架构,但并非所有列都在那里,只有一些基本列。
我想知道为什么会这样?查询包含整个 vcard 数据的记录并提取我需要的信息是否更好?应用 SELECT 查询指示我正在寻找的某些列(如果它们可用)不是更好(更快)吗?
CardDav 似乎提供了这个 vcard 数据,它们是否更适合table 联系人查找,为什么?
如果我只想列出姓名和生日怎么办?提取所有电子名片不会比使用 SQL 查询慢得多吗?我将所有内容拆分为不同的列?
ScalableOGo 数据库模式的设计方式中有很多因素发挥了作用。哪个顺便说一句是我设计的 ;-)
我认为这里的核心是它专为两种类型的客户端设计:a) 本机 CardDAV 客户端(macOS/iOS 联系人、Thunderbird)和 b) ScalableOGo 网络界面。
本机客户端基本上从不执行您所询问的查询类型。他们总是将完整的 vCard 同步到本地缓存。所以必须有一种快速的方法来存储和检索完整的 vCard,这是对服务器最常见的操作。
2003 年的 Web 客户端(我想那是我编写原始 Web 客户端的时间)还没有能力在本地存储完整的对象,并且必须执行您要求的操作:仅查询字段Web 客户端需要显示在相应的页面上。
这就是 'quick' table 的用途。它们包含 Web 客户端显示概览等所需的列。它本质上是一个应用服务器提供的 vCard 内容索引。
这应该是您问题的主要答案。
还有其他原因,排名不分先后:
- vCard 相当复杂,要将其转换为适当的 SQL 模式/对其进行规范化,是(当时是这样,但这仍然是相关的,因为系统规模增长了 100 倍以上最近 15 年)计算密集型(因此 OpenGroupware.org vs ScalableOGo)一个 BLOB 只需要流式传输到磁盘。
- CardDAV 服务器应该按原样逐字节存储完整的 vCard。这样客户端就可以执行 ETag 保护的请求。并存储自定义字段(所有客户都为客户特定字段使用自己的 X- 标签)
- 快速 tables 也被设置为可以异步构建它们,尽管我认为该功能从未进入 SOGo。如果客户端快速将 10000 张 vCards 加载到服务器(例如,只需使用 Finder 将 vCards 拖入服务器),服务器可以在后台批量更新 quick table。 vCard 到 DB 的转换不必实时发生。
- (特别是本机客户端通常在本地具有类似的 'quick' table 设置。)
希望这对您有所帮助。也许有人会在 2017 年设计一些不同的东西,虽然我认为基本的想法仍然是合理的 ;-)
前几天我在看 SOGo SQL tables 时看到记录被存储为 vcard 数据而不是精细的 table 具有不同的列,如姓氏,phone数等
虽然有一个名为 sogo_quick_contacts 的 table 具有我期望的架构,但并非所有列都在那里,只有一些基本列。
我想知道为什么会这样?查询包含整个 vcard 数据的记录并提取我需要的信息是否更好?应用 SELECT 查询指示我正在寻找的某些列(如果它们可用)不是更好(更快)吗?
CardDav 似乎提供了这个 vcard 数据,它们是否更适合table 联系人查找,为什么?
如果我只想列出姓名和生日怎么办?提取所有电子名片不会比使用 SQL 查询慢得多吗?我将所有内容拆分为不同的列?
ScalableOGo 数据库模式的设计方式中有很多因素发挥了作用。哪个顺便说一句是我设计的 ;-)
我认为这里的核心是它专为两种类型的客户端设计:a) 本机 CardDAV 客户端(macOS/iOS 联系人、Thunderbird)和 b) ScalableOGo 网络界面。
本机客户端基本上从不执行您所询问的查询类型。他们总是将完整的 vCard 同步到本地缓存。所以必须有一种快速的方法来存储和检索完整的 vCard,这是对服务器最常见的操作。
2003 年的 Web 客户端(我想那是我编写原始 Web 客户端的时间)还没有能力在本地存储完整的对象,并且必须执行您要求的操作:仅查询字段Web 客户端需要显示在相应的页面上。 这就是 'quick' table 的用途。它们包含 Web 客户端显示概览等所需的列。它本质上是一个应用服务器提供的 vCard 内容索引。
这应该是您问题的主要答案。
还有其他原因,排名不分先后:
- vCard 相当复杂,要将其转换为适当的 SQL 模式/对其进行规范化,是(当时是这样,但这仍然是相关的,因为系统规模增长了 100 倍以上最近 15 年)计算密集型(因此 OpenGroupware.org vs ScalableOGo)一个 BLOB 只需要流式传输到磁盘。
- CardDAV 服务器应该按原样逐字节存储完整的 vCard。这样客户端就可以执行 ETag 保护的请求。并存储自定义字段(所有客户都为客户特定字段使用自己的 X- 标签)
- 快速 tables 也被设置为可以异步构建它们,尽管我认为该功能从未进入 SOGo。如果客户端快速将 10000 张 vCards 加载到服务器(例如,只需使用 Finder 将 vCards 拖入服务器),服务器可以在后台批量更新 quick table。 vCard 到 DB 的转换不必实时发生。
- (特别是本机客户端通常在本地具有类似的 'quick' table 设置。)
希望这对您有所帮助。也许有人会在 2017 年设计一些不同的东西,虽然我认为基本的想法仍然是合理的 ;-)