我不确定我是否应该问这种类型的问题在这个网站,但我已经尝试问在Drupal论坛这里到目前为止没有答复。
我试图找出在现有Drupal 7站点中实现解决方案的最佳方法,该解决方案必须满足以下要求:
以前,客户端试图实现导入需求,但它是慢慢来(几天来加载csv文件),使用提要插件和分类法结构来保存部分地址字段。
我是Drupal后端开发的新手,在Drupal中主要是前端、主题化(带有html、js、css/sass和一些PHP的模板),在后端做一些简单的表单,但我有一些MySQL和PHP背景。
所以我想在构建一个模块时:
- form\_submitions (fields: id (of the submitted form), name, ... (other form fields) , adress\_id)- export:
- using a button to download all form submissions up to now, or up to / after a selected date从我迄今为止的研究来看:
- there is a Search API module that maybe would be the way to go
- I haven't used it before, but maybe it would work if i create a entity for the address with the matching fields. Would be faster that a dedicated table?
- in case it's better this way maybe, i could still use the address table as a temporary table, just to speed up the importing of the csv/xls addresses file我不确定这是否是解决问题的最佳方法,以及在Drupal 7中实现这个问题的最佳实践是什么。
我搜索过谷歌,但我还是有点困惑。有人能给我指明正确的方向吗?
发布于 2017-04-15 16:03:05
我的第一种方法是使用BatchAPI构建一个基本导入程序,并创建一个自定义实体来保存地址数据(而不是内容类型),并结合address进行适当的存储。
然后,我将使用Search和Search对这些实体进行索引和存储,然后可以使用表单API构建自定义表单,或者使用视图来公开和搜索索引--这将比Drupal db查询快得多。只要有可能,就不要让MySQL做工作,因为这将使您的站点陷入困境。
这使事情保持接近"Drupal本机“,同时解决了您在Solr中提出的许多性能问题。
您也可以使用Form构建带有#ajax回调的表单,以查询和返回Search查询中的数据。
除非您没有使用Drupal将它们存储为实体,否则进口永远不会是闪电般的快。当您不将它们存储为实体时,就会失去很多灵活性,比如插入视图或搜索API,而不需要做大量的工作。您也不能用字段API添加字段,此时它只是平面数据,所以对简单添加分类法字段或使用Address说再见。
随着Solr不断地为新的和更新的实体建立索引,只要它是合理的,让导入快速就不是一个真正的优先事项(IMO)。如果您有数百万个地址,那么Drupal将只能如此快地解析行,这在很大程度上是由于事件系统(保存一个实体、字段附加、钩子火、修改等)对entity_save的每次调用。当您想要操作或集成该数据时,您在这里以速度支付的代价将在稍后得到回报。
我链接到的要点是我对数据模块和CSV文件所做的一个实验。这将加载整个CSV文件,并使用load将其内容转储到MySQL中。这将非常快地将数据植入数据库,但是,正如我所说,您将有更多的工作试图让Drupal识别、与之通信和扩展该数据。
另一种完全非Drupal的方法是将数据导入PostgreSQL (9.4+)数据库或类似于Firebase的非SQL数据库,并对其执行搜索。再说一遍,这与执行Search + Search几乎是一样的,但您必须构建包装器来创建这些服务器并将查询发送到这些服务器。因此,仅仅为了处理数据,将所有这些工作卸载到一个单独的系统中仍然是有效的。这真的取决于你想做多少编程。
首先要说明的是,这里有几个选项,这取决于如果它不以某种方式使用Drupal,您可以忍受多少。就个人而言,我不想放弃Drupal在理解您的数据模型方面提供的灵活性,因此,我将创建一个自定义实体并从那里开始。它会慢一些,但最终会为模块生态系统中的您提供更多的集成点。
发布于 2017-04-15 15:43:59
一种可能的方法是将数据导入MySQL数据库(一个或多个表,根据您自己的想象)。然后使用福雷纳模块(公开:我是一个维护人员)构建与这些数据相关的任何报告(和/或图表)。
要真正做到这一点,您也可以将它与DataTables结合起来,例如,实现它附带的典型搜索工具。
除此之外,您还可以通过Forena将数据导出到任何典型格式,如CSV、XLS等。
PS:另一个变化是甚至不导入您的数据,而只是让Forena从Drupal中访问您现有的数据。只有Forena支持您的数据库格式(如PDO兼容、Oracle、MySQL、SQLite、MySQL等),才能工作。
https://drupal.stackexchange.com/questions/234147
复制相似问题