记录时数百万个实体 -- entities 领域 和 database 领域 drupal 相关 的问题

Millions of entities when logging


3
vote

问题

中文

我知道有很多写在笨拙和桌子上有很多数千个甚至数百万记录,但每个人都有一个不同的解决方案,我想提出一个特定的情况。

我正在使用日志模块( https://www.drupal.org/project/log < / a>)对于drupal 7,以保存有关我为在Azure云中的小Ubuntu VM上运行的内部系统创建的进程的进程的详细自定义日志消息。我的日志实体的捆绑有三个自定义字段。 150万条记录有4个定制字段,为600万条记录,每次流程迭代时都在增长。

您可以想象,在对日志表进行查询时,站点将减速到近距离停止。

我正在考虑编写一个小模块,将实体放入一个不属于drupal或将数据导出到csv文件中的表中的表。

有更好的方法吗?

谢谢, Josh

英文原文

I know there is a lot written on Drupal and tables that have tens of thousands and even millions of records but everyone has a different solution and I want to bring up a specific case.

I am using the log module (https://www.drupal.org/project/log) for Drupal 7 to save detailed custom log messages about a process that I have created for an internal system running on a small ubuntu VM in the Azure cloud. My bundle for the log entity has three custom fields. At 1.5 Million records with 4 custom fields that is 6 Million Records and we are growing every time the process iterates.

As you can imagine the site is slowed down to a near stop when making queries against the log table.

I am thinking of writing a little module to put the entities into a table that is not part of Drupal or exporting the data into a CSV file.

Is there a better way?

Thanks, Josh

     
   
   

回答列表

0
 
vote

我会看的第一件事是为您的表创建指数。查看您正在制作的查询,并查看是否无法使用SQL索引优化它们。例如。如果要查询与连接的节点ID和用户ID,请尝试创建三个索引,一个用于NID,一个用于ID,一个用于NID和ID。

具有正确的指数可以使漫长的查询飞。

 

First thing I would look at is creating indices for your tables. Look at the queries you are making and see if you can't optimize them with an SQL index. E.g. if you are querying against node id and user id with joins, try creating three indices, one for nid, one for id, one for nid and id.

Having the right indices can make a long running query fly.

 
 
 
 
0
 
vote

关于您的一般方法,您在正确的轨道上 - 避免登录Drupal的看门狗表;避免在Drupal中写入自定义表。代替文件写入日志。此外,您需要确定保留计划并定期修剪日志。

在@darvanen评论中,有一些模块可用于Drupal 7,但它们在稳定性/支持方面变化。以下是您发现的概要:

  • 文件记录器( https://www.drupal.org/project/flog ) :具有稳定的释放,但尚未在5年内更新;在日志条目时支持记录任何PHP变量,标签和PHP堆栈的转储;仅限于登录到一个日志文件
  • 文件记录器操作( https://www.drupal.org/sandbox// Martin_klima / 2257705 ):Sandbox模块延伸,允许支持将可自定义的消息(用令牌)写入日志文件

  • 在文件中写日志( https://www.drupal.org/sandbox / Vikrantr / 2688987 ):沙箱模块可以用作自定义模块的起点,支持记录到多个文件

  • 文件日志( https://www.drupal.org/project/filelog):除D6版本外,只有D7的DEV版本/初始端口,尚未在6年内更新;看门狗接口实现将系统事件直接记录到文件中作为syslog核心模块的替代方案

 

Regarding your general approach, you're on the right track- avoid logging to Drupal's watchdog table; avoid writing to even a custom table in Drupal. Write logs to file(s) instead. Additionally, you'll want to determine a retention plan and prune the logs on a regular basis.

As @darvanen commented, there are some modules available for Drupal 7, but they vary in stability/support. Here's a synopsis of what you'll find:

  • File Logger (https://www.drupal.org/project/flog): has a stable release, but has not been updated in 5 years; supports logging of any php variable, a label, and dump of php stack at time of log entry; limited to logging to just one log file
  • File logger action (https://www.drupal.org/sandbox/martin_klima/2257705): sandbox module that extends above to allow support of writing a customizable message (with tokens) to the log file

  • Write Logs In File (https://www.drupal.org/sandbox/vikrantr/2688987): sandbox module that could be used as a starting point for a custom module that supports logging to multiple files

  • File Log (https://www.drupal.org/project/filelog): only a dev version / initial port to D7 exists besides the D6 versions, hasn't been updated in 6 years; a watchdog interface implementation which records system events directly into files as an alternative to the Syslog core module

 
 
0
 
vote

取决于您的确切用例和需要,您可以使用核心的 syslog module 代替默认数据库日志记录。

 

Depending on your exact use case and needs you can use core's syslog module in place of the default database logging.

 
 
0
 
vote
vote
最佳答案
 

我正在尝试归档实体,而不是从日志模块(drupal.org/project/log)的系统日志实体。我写了一个小模块,在Cron上找到最多25k的日志实体,为30天历史,然后将它们保存到CSV文件并删除它们。 http://dropbucket.org/node/9182

我希望这有助于别人。

 

I was trying to archive entities rather than system log entities from the log module (drupal.org/project/log). I wrote a small module that on cron finds up to 25K log entities that are 30 days old and then saves them to a CSV file and deletes them. http://dropbucket.org/node/9182

I hope this helps someone else.

 
 

相关问题

6  Logicexception:控制器结果要求提供相关的缓存元数据,但检测到泄露的元数据  ( Logicexception the controller result claims to be providing relevant cache meta ) 
logicexception:控制器结果要求提供相关 缓存元数据,但检测到泄露的元数据。请确保您 没有太早渲染内容。返回对象类: Drupal REST Resourceresponse。在 drupal core evarientubscriber sopeRenderingContr...

1  如何筑巢现场收集?  ( How to nest a field collection ) 
如何在Drupal 8中嵌套现场集合? 我有字段集合安装并工作正常。我想要实现的是,例如,我将在前端上有一个盒子,它可以包含6个内容标签,或两个包含3个选项卡的框。 第一部分工作:我有一个"标签" 字段集合,我可以"添加另一个项目" (标签)。 对于第二个选项,我需要一个"框" 字段集合,只包含"标签" 字段集合。...

2  如何使用Datadefinition :: Create('list')?  ( How to use datadefinitioncreatelist ) 
答案链接到a 所有可能使用的所有类型的列表 DataDefinition::create() 。 可以使用的一个插件是 itemlist 。 但我找不到有关如何定义列表中的项目的任何文档。 我会期待这样的东西: $status_definition = DataDefinition::create('list...

3  从段落中引用块插件或表单?  ( Reference a block plugin or form from a paragraph ) 
是否有一种方法来引用自定义表单(用Form API构建)或一个块插件,该插件呈现相同的形式?我只看到了一种方法来引用自定义块(内容)或配置块,而不是两者。如何解决这一场景? ...

0  以节点上的以编程方式重新排列实体引用列表的顺序  ( Programmatically rearrange order of entity reference list on node ) 
我的内容类型有一个节点参考字段,允许用户输入无限量的节点。我需要以编程方式更改此列表中第一个问题。 使用下面的代码,我能够从字段中获取数据。 $node = Drupal::entityTypeManager()->getStorage('node')->load($function); $focus = $no...

0  休假月(日期)字段空白(可选)  ( Leave month date field blank optional ) 
我想知道是否有可能有drupal(7),请离开月字段null(空)。 当有人设置日期时,有时他们不需要输入一个月。当我默认尝试这个时,Drupal表示需要一个月。 感谢 ...

0  如何在字段中显示(自动)引用此节点的所有介质?  ( How to display automatically in a field all media that references this node ) 
我有一个内容类型,"水果" 。使用该内容类型,我创建了"Bananas" 节点。它包含构成"香蕉信息" 的文本和链接字段。 我有媒体类型,"果实图像" ,带有一个字段,"果仁夏" 。使用该媒体类型我有许多香蕉和其他水果的图像。 在我的水果页面上,如何在一个字段中自动显示 所有图片的Bananas(即媒体类型"果实图像...

6  我在哪里可以找到自定义实体字段的所有表单显示选项类型?  ( Where can i find all form display options types for custom entity fields ) 
我创建了一个与 drupal generate:entity:content 的自定义实体。 我在实体类的 99887664 方法中添加字段。 下面是默认情况下的drupal控制台为 name 字段生成。 在哪里可以找到所有可能的 type ->setDisplayOptions('form') 的值。例如,下面的...

1  与现有数据的自定义实体  ( Custom entity with existing data ) 
我正在寻找使用CTools页面管理器创建的面板页面创建Drupal 7自定义实体,以便使用搜索api 。一个现有项目页面管理器搜索,似乎正在做的那样,但我正在击中一个问题 从页面管理器搜索项目中看到的内容,它看起来可能是可以在不使用 hook_schema() 的情况下创建自定义实体。任何人都有这样做的经历以及任何潜...

0  hook_entity_base_field_info()与创建新实体  ( Hook entity base field info vs creating a new entity ) 
我需要创建一个相当广泛的网站的用户/帐户管理部分。 我想知道是否只是扩展现有的用户实体,或者我是否应该创建一个全新的实体来容纳我需要的所有额外的东西... 在做出这个决定时,我应该牢记这个问题吗? ...

0  basefielddefinition setDisplayOptions ...键入='string_textfield'...无法设置默认占位符或大小?  ( Basefielddefinition setdisplayoptions type string textfield unable t ) 
我无法获取默认占位符和/或大小以注册到BaseFieldDefinition。我正在尝试这样的东西: $fields['company_name'] = BaseFieldDefinition::create('string') ->setLabel(t('Company Name')) ...

3  在模板文件中显示在媒体实体上创建的自定义字段的值  ( Display values of custom fields created on media entity in a template file ) 
我正在尝试从我 998887665 上创建的自定义字段中的值显示到我的 998887666 文件。我尝试输出的字段 Location 和 Photographer 我在下面尝试使用此代码,使其工作。 {{ node.field_photographer.entity.value }} 还尝试了替代 ...

3  访问现有块中的电流节点  ( Access current node in an existing block ) 
我正在使用Drupal Lightning和Bootstrap Subtheme。我需要在另一个块区域中放置节点页面模板的一部分。因此,我需要访问该块中的节点字段,像分类,块,面包屑等字段。示例我的节点 - Page.html.twig模板打印这些字段: {{ node.title.value }} {{ co...

0  hook_entity_presave:字段无法访问  ( Hook entity presave field not accessible ) 
我一直在沉思这个问题一段时间,我无法弄清楚: 我正在尝试检索并最终修改我实体的两个值。使用第一个(Field_Registro)它有效,第二个(Field_final_Note)它没有。 两个字段是类型编号(整数),没有限制。 这就是我的钩子的样子: function mymodule_entity_presav...

0  在提交自定义实体表单后重定向  ( Redirect after submitting custom entity form ) 
我正在使用自定义实体,并希望根据提交的值编程方式设置重定向。 当我设置重定向路径时,用户被重定向到规范路径而不是我在重定向中设置的路径。 在文件 mymodule/src/Form/MyEntityForm.php 中,我正在做这样的事情: public function submitForm(array &...

2  如何从EntityRefectionItem访问实体?  ( How to access entity from entityreferenceitem ) 
我有下面的附加数组,需要帮助弄清楚如何访问受保护的"属性" 阵列(见屏幕截图)的"实体" 属性。 我正在使用 ViewField模块 背景: field_name是一个实体参考字段。我需要获取EntityReference,以便我可以调用gettarget()来获取EntityAdapter,然后调用Ent...

0  通过机器名称获取字段值  ( Get field value by machine name ) 
我在Drupal 7中开发了一个自定义模块。我在这里询问了类似的问题: drupal 7获取字段值机器名称并传递给JavaScript 但是这个问题的差异是,而不是分类学期,我想获得常规文本字段的字段值。 以下是我用来获取分类学术语的字段值以传递给JavaScript的代码,该术语当前驻留在我的主题的hook_...

0  如何检测实体转换而不使用路径前缀或域?  ( How to detect entity translation without using path prefix or domain ) 
我们有一种情况,我们想要拥有内容翻译已启用。我们的理解是,这是使用实体翻译(从d7)现在是d8核心。这也意味着将有一个节点(ID),但将有一个表来保持字段的翻译。 目标: 为文章内容类型启用内容转换,并使所有字段翻译 创建一个英文页面调用test-page 单击"翻译" 并添加到西班牙语的翻译 在西班牙语内容中...

0  如何从实体参考字段获取节点URL?  ( How to get node url from entity reference field ) 
我们有一个参考文章和基本页面内容类型。在Twig模板中,我们使用以下行下行获取节点的NID值,然后在Twig模板中使用该节点以创建指向该节点的链接。但是,我们在注销时获取以下错误消息(用于登录用户,它适用于正常)。 如何为匿名和登录用户获取节点的URL? twig模板(Eck-entity - compone...

0  如何以编程方式填充下拉列表字段的选项?  ( How can i programmatically populate a drop down list fields options ) 
我有一个段落捆绑,其中几个字段,它们是下拉列表。 如何通过代码,编程填充此下拉列表? 我真的不知道从哪里开始... ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.