问题标签 [schemaless]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1271 浏览

mongodb - MongoDB:设计用于保存聊天/离线/未发送聊天的数据库

我正在尝试创建一个 mongodb 设计来支持聊天应用程序。系统需要将消息写入状态为已交付(布尔)和已读(布尔)的集合。

1 条消息将能够发送给超过 1 人。

有人知道在 mongodb 无模式设计中这种类型的东西有一个好的模式吗?

我正在考虑在集合中有一个数组,该数组将包含另一个具有 3 个属性的文档。“收件人姓名”、“读取(布尔值)”和“已交付(布尔值)”。

这样,在运行时,我可以使用点符号进入数据库,以查找发送给特定人员的所有消息、所有未读消息、所有未传递消息等。

我想我也需要另一个属性“发送者的姓名”,所以我能够重建发送的消息列表和状态

有没有人看到一个很好的设置?

我的想法是正确的还是有更好的方法来实现这样的解决方案

0 投票
1 回答
1686 浏览

elasticsearch - 在 ElasticSearch 中存储混合数据类型

我正在使用 logstash 来管理我的应用程序日志。我想将一些上下文数据与日志条目一起存储。这些上下文数据不必被索引。但它可以具有不同的结构/数据类型,具体取决于应用程序上下文。例如,上下文可以是以下任何一种格式

细绳

大批

或者它可能是一个对象

是否可以在 ElasticSearch 中有这样的字段?该字段不必被索引,它只需要被存储。

0 投票
1 回答
120 浏览

c# - neo4jclient:在运行时创建属性/字段,没有固定模式应用程序

我正在使用具有自己的字段(Id、Name)的产品创建一个电子商务:这是我在 c# 中拥有的对象

这是我用 C# 生成产品到 neo4j 的代码

假设一个用户或者我需要给产品节点添加一些其他的属性,比如价格,第一件事就是在类中添加一个新的产品属性

然后修改密码以添加具有网络属性/属性的产品。

显然,这是一种硬编码方法,不适合动态数据库/站点。

由于我已经习惯了 RDBMS,这种类型的问题只能通过 EAV 和许多枢轴来解决,我希望 Nosql(即 Neo4J)可以帮助我在没有 EAV 的情况下处理可变属性文件。生成代码的代码可能是一个解决方案?

  • 我想到的是使用动态代码/变量或codeDom,这是要走的路吗?还有其他优雅的解决方案吗?
  • 请提供一些解释或研究主题。
  • NoSql 应该是无模式的,但它的无模式应用程序不是那么容易,对吗?
0 投票
1 回答
210 浏览

database - 具有动态模式的数据库的 DBMS 选择方法?

我正在开始一个项目,并试图抽象出它面临的挑战。我来自 RDBMS 背景,希望为我的下一个项目对存储技术做出明智的决定。我知道如果 RDBMS 是我唯一的选择,我将如何解决这些问题,但我有兴趣了解该行业的发展方向——理想情况下,有人看到这一点并说:'我正是这样做的,并使用了 ###,它工作得很好,但我们不得不使用### 来处理使用高峰。如果这是业务的最佳选择,我并不害怕爬回我的 RDBMS 洞穴。

所以问题:

也就是说,每个客户都可能希望将自己的“列”添加到数据库中,然后再针对它们进行搜索。

我的期望是数据不会快速变化(高读写比),我可以很高兴地异步[例如报告的生成]。但是基于简单标准的提取需要快速并针对自定义字段。

在数据库之上是一些限制在列级别可以看到的功能——例如,只有 F 的成员可以查看 G 成员的电子邮件。这些再次需要是动态的(假设我的自定义用户属性是敏感的,并且我有一些方法可以围绕它设置业务规则)。根据技术,我想这可能存在纯粹的应用程序(获取整个对象,然后根据规则进行限制)或更复杂的查询构建器类型系统。

接下来是“图表”类型的搜索——我目前看不到这超出了几个自由度,但能够通过几个不同的路线找到例如与组的 2 度连接的用户(某些连接可能不固定在开发时间)。如上所述,这可能是可以异步处理的东西,

我想寻找目前能够处理 1000 万用户、100 万组、100K 日活跃用户、5K 能够管理的用户(例如添加列)的东西。(是的,使用 MySQL 或类似工具完全可以实现,但需要合理的工程量)

就实际开发/基础设施而言:

  • 我不想用无证的配置/陷阱之类的东西撕掉我的头发(这就是说我很高兴学习东西,只要它不会让我为了起步而获得学位)
  • 可以设置高可用性和健壮性的东西——例如体面的集群管理和可用的报告(或者在专家的帮助下不那么昂贵)
  • 最好是开箱即用的相对较快部署的东西
  • 我可能有一个金融交易模块(未确认),所以 ACID 是加分项
  • 具有成熟的库,可以很好地与 Spring 框架配合使用。
  • 当然,好的文档/示例。足够的信息来掌握概念模型以及实用的操作方法
  • 开源

我已经阅读了[很多]关于那里的产品的信息,但想将其缩减为 2 个我可以淘汰的明智选择。阅读时:MongoDB;卡桑德拉;沙发底座;沙发数据库;新4J;(还有更多),我选择了 CouchBase。但我也知道有大量的营销材料旨在吸引像我这样的人对某个特定的想法。

所以这个问题总结为三个问题:有没有什么方法行不通?有没有被证明有效的方法?目前是否有明确的最佳选择?

0 投票
0 回答
93 浏览

solr - 使用 Schemaless 模式时,Solr 无法存储发送到 Tika 的文字

我正在使用 Solr + Cell (Tika) + schemaless 模式,当我发送要索引的文件时,我没有看到我提供的任何文字存储在结果文档中。这是我*:*在 solr 管理 UI 中执行查询时看到的返回结果。它仅包含 ID 字段和版本,但不包含文件中的其他文字甚至内容。

这是我要发送的 POST:

我正在使用 SolrJ 使用以下代码发送此请求:

它创建文档,但无法存储我提供的文字值。而且我很确定它从文件内容中读取的元数据和内容也没有被存储。

我可以确认,如果我使用此代码,它会很好地存储所有内容:

那么为什么不存储这些呢?

0 投票
2 回答
2317 浏览

json - 对弹性搜索查询的无模式支持

我们的 REST API 允许用户将自定义无模式 JSON 添加到我们的一些 REST 资源中,我们需要它可以在 Elasticsearch 中搜索。此自定义数据及其结构在同一类型的资源中可能完全不同。

考虑这个示例文档:

customData遵循模式外的所有字段。customData始终是 JSON 对象,但该对象中的所有字段和值可能因资源而异。无法保证 customData 中的任何给定字段名称或值(甚至值类型)在任何两个资源中都是相同的,因为用户可以根据需要编辑这些字段。

支持搜索的最佳方式是什么?

我们认为解决方案是在创建customData索引时不创建任何映射,但随后它变得不可查询(这与ES 文档所说的相反)。如果对非映射属性的查询有效,这将是理想的解决方案,并且这种方法没有性能问题。但是,在为此进行了多次测试之后,我们无法让它发挥作用。

这是需要任何特殊配置的东西吗?还是文档不正确?非常感谢您对为什么它不起作用的一些澄清。

由于这目前不适合我们,我们已经想到了几个替代解决方案:

  1. 重新索引:这将是昂贵的,因为我们需要重新索引包含该文档的每个索引,并且每次用户更新具有不同值类型的属性时都这样做。对性能真的很不利,所以这可能不是一个真正的选择。

  2. 使用多重匹配查询:每次 customData 对象发生变化时,我们都会通过在 customData 字段名称中附加一个随机字符串来做到这一点。例如,这就是被索引的文档的样子:

    这意味着 ES 将为每个“随机”字段创建一个新映射,并且在执行查询时,我们将使用短语多重匹配查询,使用“开头为”通配符作为字段名称。例如:

    这可能是一个可行的解决方案,但我们担心这样的映射过多会影响性能。索引上的映射过多是否会对性能产生影响?也许定期重新索引可以减轻映射过多?

    这也只是感觉像是一种 hack,应该由 ES 本地处理。我错过了什么吗?

任何关于这方面的建议将不胜感激。

谢谢!

0 投票
1 回答
568 浏览

rdbms - Schema vs Schemaless DBMS

我正在将 Couchbase Lite 数据库用于我所知道的无模式项目,我对此感到非常满意,因为它解决了我的问题,但它提出了一个与 NoSQL(文档数据库)中的主键约束相关的问题。

众所周知,所有的 Schema Database 都会用表来表示,这些表可能有也可能没有主键/伪造键。例如,假设我有一个名为 Student 的表,其主键为 usn(大学座位号),以及其他属性,名字、姓氏、地址、联系人号码等。

美股 | 名字 | 姓氏 | 地址 | 联系电话

2BA11CS409 | 美国广播公司 | mnq | 班加罗尔 | 1234567890

2BA11CS410 | xyz | 二维码 | 孟买 | 1234567809

在这里,如果我再次尝试添加 2BS11CS409 值,该表将显示违反主键约束(无法添加重复键)的错误。

但是文档数据库中的情况是什么,它将如何识别文档中的唯一值,

我知道每个文档都有一个唯一的 ID,其键被索引以在数据库中搜索,但是我创建的另一个文档具有与上面相同的值,

当我尝试使用 usn 访问一个数据库时,它必须只返回一个文档,但它会返回我两个文档可能相同或不同。

我需要知道文档数据库中的主键/唯一键概念,它存在于关系数据库中。或者您可以将我重定向到一些文章

谢谢你。

0 投票
1 回答
391 浏览

mysql - Cassandra 在单节点设置中与 MySQL(或任何其他 RDBMS)相比如何?

在研究了关系数据库、文档存储、图形数据库和面向列的数据库之后,我得出结论,像 Cassandra 这样的东西最适合我的需求。特别是,动态添加列的能力并且不需要严格的模式,这对我来说是一笔交易。这似乎很好地弥合了相当新颖的图形数据库和经过时间考验的 rdbms 之间的差距。

但我担心如何在单个节点上运行 Cassandra。像许多其他人一样,我只能从少量数据开始,所以从多个节点开始是不切实际的。基于另一个出色的 SO 问题:您为什么不像通常使用 MySQL 那样从“单一和小型”Cassandra 服务器开始?我的结论是,Cassandra 确实可以作为单节点运行,只要愿意放弃多节点设置带来的可用性等好处。

似乎也有一些方法可以在 RDBMS 中实现动态添加字段,例如这里讨论的 SO:How to design a database for User Defined Fields?在某种程度上,这将模仿无模式。

所以我现在想了解 Cassandra 和 MySQL 在单节点设置上如何比较特性和性能?在我的情况下,您会给某人什么建议 - 从一个简单的 RDBMS 开始,并计划/打算稍后切换到 Cassandra?还是从 Cassandra 开始?

0 投票
1 回答
707 浏览

solr - 是否可以在无模式模式下使用 Solr 在字段名称中包含特殊字符?

我希望我的动态字段名称能够包含哈希字符。当 Solr 处于无模式模式时,这可能吗?

0 投票
1 回答
96 浏览

json - HBase 从具有 row-id 的任意 JSON 插入

是否有任何软件可以将任何给定的 JSON 转换为 HBase(JSON 或 Thrift)插入?

假设我收到以下 JSON 到我的流

为了将此信息添加到Hbase我需要发送HTTP PUThttp://192.168.44.187:8000/<TABLE>/<ROW_ID>/<COL_FAMILY>:<COLUMN>,我是否需要将其更改为 <ROW_ID> = www.somesite.com等等。因此,http://192.168.44.187:8000/t1/www.somesite.com/ColFam:label要添加label. 此外,正文PUT必须包含相应base64的格式化值。